当前位置: 首页 > news >正文

大连建网站需要多少钱wordpress主题自定义模块

大连建网站需要多少钱,wordpress主题自定义模块,跨界营销案例,the7 wordpress theme前言#xff1a; 当今互联网技术日新月异#xff0c;随着数据量的爆炸式增长#xff0c;如何高效地存储和管理数据成为了每个公司都必须面对的挑战。与此同时#xff0c;用户对于应用程序的响应速度和稳定性要求也越来越高。在这个背景下#xff0c;Redis 作为一个…前言         当今互联网技术日新月异随着数据量的爆炸式增长如何高效地存储和管理数据成为了每个公司都必须面对的挑战。与此同时用户对于应用程序的响应速度和稳定性要求也越来越高。在这个背景下Redis 作为一个高效、稳定、易用的内存数据库应运而生。 Redis 具有数据结构丰富、读写速度快、支持事务、发布订阅等诸多优点使得它在缓存、会话存储、消息队列等场景中得到了广泛应用。尤其是在大规模分布式系统中Redis 可以作为一个高速的分布式缓存帮助提升应用程序的响应速度和吞吐量从而提升用户体验和公司业务价值。 因此本期的送书活动将为大家介绍这本书 《高效使用Redis一书学透数据存储与高可用集群》。 目录 前言         Redis是单线程的吗  01 Redis中的多线程 02 I/O多线程 03 Redis中的多进程 04 结论 送书活动 参与方式 在此之前我要先问大家一个常见的问题 Redis是单线程的吗  很多人都遇到过这么一道面试题Redis是单线程还是多线程这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程说复杂是因为这个答案其实并不准确。 难道Redis不是单线程我们启动一个Redis实例验证一下就知道了。Redis安装部署方式如下所示 // 下载 wget https://download.redis.io/redis-stable.tar.gz tar -xzvf redis-stable.tar.gz // 编译安装 cd redis-stable make // 验证是否安装成功 ./src/redis-server -v Redis server v7.2.4接下来启动Redis实例使用命令ps查看所有线程如下所示 // 启动Redis实例 ./src/redis-server ./redis.conf// 查看实例进程ID ps aux | grep redis root     385806  0.0  0.0 245472 11200 pts/2    Sl  17:32   0:00 ./src/redis-server 127.0.0.1:6379// 查看所有线程 ps -L -p 385806PID    LWP TTY          TIME CMD 385806 385806 pts/2    00:00:00 redis-server 385806 385809 pts/2    00:00:00 bio_close_file 385806 385810 pts/2    00:00:00 bio_aof 385806 385811 pts/2    00:00:00 bio_lazy_free 385806 385812 pts/2    00:00:00 jemalloc_bg_thd 385806 385813 pts/2    00:00:00 jemalloc_bg_thd竟然有6个线程不是说Redis是单线程吗怎么会有这么多线程呢 这6个线程的含义你可能不太了解但是通过这个示例至少说明Redis并不是单线程。 01 Redis中的多线程 接下来我们逐个介绍上述6个线程的作用 1redis-server 主线程用于接收并处理客户端请求。 2jemalloc_bg_thd jemalloc 是新一代的内存分配器Redis底层使用他管理内存。 3bio_xxx 以bio前缀开始的都是异步线程用于异步执行一些耗时任务。其中线程bio_close_file用于异步删除文件线程bio_aof用于异步将AOF文件刷到磁盘线程bio_lazy_free用于异步删除数据懒删除。 需要说明的是主线程是通过队列将任务分发给异步线程的并且这一操作是需要加锁的。主线程与异步线程的关系如下图所示 主线程与异步线程 这里我们以懒删除为例讲解为什么要使用异步线程。Redis是一款内存数据库支持多种数据类型包括字符串、列表、哈希表、集合等。思考一下删除DEL列表类型数据的流程是怎样的呢第一步从数据库字典中删除该键值对第二步遍历并删除列表中的所有元素释放内存。想想如果列表中的元素数目非常多呢这一步将非常耗时。这种删除方式称为同步删除流程如下图所示 同步删除流程图 针对上述问题Redis提出了懒删除异步删除主线程在收到删除命令UNLINK时首先从数据库字典中删除该键值对随后再将删除任务分发给异步线程bio_lazy_free由异步线程执行第二步耗时逻辑。这时候的流程如下图所示 懒删除流程图 02 I/O多线程 难道Redis是多线程那为什么我们老说Redis是单线程呢这是因为读取客户端命令请求执行命令以及向客户端返回结果都是在主线程完成的。不然的话多线程同时操作内存数据库并发问题如何解决如果每次操作之前都加锁那和单线程又有什么区别呢 当然这一流程在Redis6.0版本也发生了改变Redis官方指出Redis是基于内存的键值对数据库执行命令的过程是非常快的读取客户端命令请求和向客户端返回结果即网络I/O通常会成为Redis的性能瓶颈。 因此在Redis 6.0版本作者加入了多线程I/O的能力即可以开启多个I/O线程并行读取客户端命令请求并行向客户端返回结果。I/O多线程能力使得Redis性能提升至少一倍。 为了开启多线程I/O能力需要先修改配置文件redis.conf io-threads-do-reads yes io-threads 4这两个配置含义如下 io-threads-do-reads是否开启多线程I/O能力默认为no io-threadsI/O线程数目默认为1即只使用主线程执行网络I/O线程数最大为128该配置应该根据CPU核数设置作者建议4核CPU设置2~3个I/O线程8核CPU设置6个I/O线程。 开启多线程I/O能力之后重新启动Redis实例查看所有线程结果如下 ps -L -p 104648PID    LWP TTY          TIME CMD 104648 104648 pts/1    00:00:00 redis-server 104648 104654 pts/1    00:00:00 io_thd_1 104648 104655 pts/1    00:00:00 io_thd_2 104648 104656 pts/1    00:00:00 io_thd_3 ……由于我们设置了io-threads等于4所以会创建4个线程用于执行I/O操作包括主线程上述结果符合预期。 当然只有I/O阶段才使用了多线程处理命令请求还是单线程毕竟多线程操作内存数据存在并发问题。 最后开启了I/O多线程之后命令的执行流程如下图所示 I/O多线程流程图 03 Redis中的多进程 Redis还有多进程是的。在某些场景下Redis也会创建多个子进程来执行一些任务。以持久化为例Redis支持两种类型的持久化 AOFAppend Only File可以看作是命令的日志文件Redis会将每一个写命令都追加到AOF文件。 RDBRedis Database以快照的方式存储Redis内存中的数据。命令SAVE用于手动触发RDB持久化。想想如果Redis中的数据量非常大持久化操作必然耗时比较长而Redis是单线程处理命令请求那么当命令SAVE的执行时间过长时必然会影响其他命令的执行。 命令SAVE有可能会阻塞其他请求为此Redis又引入了命令BGSAVE该命令会创建一个子进程来执行持久化操作这样就不会影响主进程执行其他请求了。 我们可以手动执行命令BGSAVE验证。首先使用GDB跟踪Redis进程添加断点让子进程阻塞在持久化逻辑。如下所示 // 查询Redis进程ID ps aux | grep redis root     448144  0.1  0.0 270060 11520 pts/1    tl  17:00   0:00 ./src/redis-server 127.0.0.1:6379// GDB跟踪进程 gdb -p 448144// 跟踪创建的子进程默认GDB只跟踪主进程需手动设置 (gdb) set follow-fork-mode child // 函数rdbSaveDb用于持久化数据快照 (gdb) b rdbSaveDb Breakpoint 1 at 0x541a10: file rdb.c, line 1300. (gdb) c设置好断点之后使用Redis客户端发送命令BGSAVE结果如下 // 请求立即返回 127.0.0.1:6379 bgsave Background saving started// GDB输出以下信息 [New process 452541] Breakpoint 1, rdbSaveDb (...) at rdb.c:1300可以看到GDB目前跟踪的是子进程进程ID是452541。也可以通过Linux命令 ps 查看所有进程结果如下 ps aux | grep redis root     448144  0.0  0.0 270060 11520 pts/1    Sl  17:00   0:00 ./src/redis-server 127.0.0.1:6379 root     452541  0.0  0.0 270064 11412 pts/1    t   17:19   0:00 redis-rdb-bgsave 127.0.0.1:6379可以看到子进程的名称是redis-rdb-bgsave也就是该进程将所有数据的快照持久化在RDB文件。 最后再思考两个问题。 问题1为什么采用子进程而不是子线程呢 因为RDB是将数据快照持久化存储如果采用子线程主线程与子线程将会共享内存数据主线程在持久化的同时还会修改内存数据这有可能导致数据不一致。而主进程与子进程的内存数据是完全隔离的不存在此问题。 问题2假设Redis内存中存储了10GB的数据在创建子进程执行持久化操作之后此时子进程也需要10GB的内存吗复制10GB的内存数据也会比较耗时吧另外如果系统只有15GB的内存还能执行BGSAVE命令吗 这里有一个概念叫写时复制copy on write在使用系统调用fork创建子进程之后主进程与子进程的内存数据暂时还是共享的但是当主进程需要修改内存数据时系统会自动将该内存块复制一份以此实现内存数据的隔离。 命令BGSAVE的执行流程如下图所示 BGSAVE执行流程 04 结论 Redis的进程模型/线程模型还是比较复杂的这里也只是简单介绍了部分场景下的多线程以及多进程其他场景下的多线程、多进程还有待读者自己研究。 作者介绍 李乐好未来Golang开发专家、西安电子科技大学硕士曾就职于滴滴乐于钻研技术与源码合著有《高效使用Redis一书学透数据存储与高可用集群》《Redis5设计与源码分析》《Nginx底层设计与源码分析》。 送书活动 《高效使用Redis一书学透数据存储与高可用集群》 推荐语深入Redis数据结构与底层实现攻克Redis数据存储与集群管理难题。 参与方式 参与方式 抽奖方式两周后评论区随机抽取若干名小伙伴送出 参与方式关注博主、点赞、收藏、评论区评论 切记要点赞 收藏否则中奖无效每人最多评论三次 如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力
http://www.hkea.cn/news/14374074/

相关文章:

  • sns社交网站开发资阳网站建设资阳
  • 江苏建设教育网站营销型网站免费企业网站模版
  • 商城网站系统建设网站建设服务承诺包括什么
  • 中国住房和城乡建设部网站证书查询网站分析与优化的文章
  • 响水县住房和城乡建设局网站常州做网站哪家快
  • 青岛市住房和城乡建设局官方网站山东建设局网站
  • 北京平台网站建设多少钱自助建网站不需要域名
  • 创办网站需要怎么做系统软件开发
  • 做公司网站注意事项二维码转链接在线生成器
  • 网站商城微信支付宝支付宝支付接口html网页代码成品
  • 亚马逊海外版网站搜索引擎营销的内容和层次有哪些
  • 北京网站建设 爱牛带分销功能的小程序
  • 房屋建筑图纸设计说明seo零基础入门到精通200讲
  • 品牌网站建设收费情况可以做mv 的视频网站
  • 网站开发前后端个人做网站需要注意什么
  • 网约车平台app网站建设沙田网站建设
  • 哪个公司建网站好在家来料加工
  • 东莞网站搜索排名奉贤青岛网站建设
  • 微盟如何做网站seo网站推广优化公司
  • 二维码网站建设弹出网站代码
  • 如何为网站开发app公司网站建设方面不足
  • 个人备案网站做淘宝客福田瑞沃q5
  • 怎么做游戏自动充值的网站南京建设网
  • 怎么搞免费的网站成全视频免费观看在线看2024年新年贺词
  • 百姓网网站源码长春网站建设排名
  • 安徽网站建设方案服务工业设计服务
  • 福州网站建设推广秦皇岛建设管理中心网站
  • wordpress 网站统计插件下载贵德网站建设
  • 外贸公司英文网站内网做网站需要空间吗
  • 南京网站建设小程上海备案证查询网站查询网站查询系统