高端网站制,制作花灯,软件网站排行榜,快手app下载安装免费下载失败是成功之母 ——法国作家巴尔扎克 目录
单线程模型
Redis为什么这么快 单线程模型 redis只使用一个线程#xff0c;处理所有的命令请求#xff0c;不是说redis服务器进场内部真的就只有一个线程#xff0c;其实也有多个线程#xff0c;那就是处理网络和io的线程。 R… 失败是成功之母 ——法国作家巴尔扎克 目录
单线程模型
Redis为什么这么快 单线程模型 redis只使用一个线程处理所有的命令请求不是说redis服务器进场内部真的就只有一个线程其实也有多个线程那就是处理网络和io的线程。 Redis使用单线程架构来实现高性能的内存数据库服务。 下图是两个redis-cli客户端对同一个redis服务器进行1请求 在学习java的过程中我们就可以很容易的就知道这里肯定涉及到一个多线程问题表面上是自增两次但是实际上可能只自增了一次。 出现这种问题的原因就是并发。 幸运的是redis并不会发生这种问题。因为redis是单线程模型保证了接受多个请求都是串行的执行多个请求也是需要在请求队列中进行排队一个一个的执行。 redis能够使用单线程模型来进行很好的工作得益于redis的核心业务逻辑都是短平快。不需要消耗很多的cpu资源就可以执行。 redis单线程图解 但是他也有弊端那就是如果一个操作时间过长那么就会影响其他任务的执行。 说了这么多既然是单线程那为什么redis这么快 Redis为什么这么快 一切的快慢都是有参照物的那么redis的快的参照物毫无疑问那就是mysql和SqlServer等关系型数据库。因为redis是直接访问内存而这些关系型数据库一般都是访问硬盘操作访问内存的操作肯定比访问硬盘的操作要更加的快速。 其次redis要做的业务的核心功能更加简单。Redis既是访问内存干的事也是很简单。关系型数据库mysql对于插入查询都有着更加复杂的功能支持这样的功能势必要话费更多的开销。例如各种插入都有各种约束都会消耗性能让数据库变慢。 Redis干的活很少提供的功能也是少了不少。 由于单线程模型避免了一些不必要的线程竞争开销。 处理网络IO的时候使用了epoll这样的IO多路复用一个线程管理多个socket再加上Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件不在网络 I/O 上浪费过多的时间。
Redis如何利用多路复用 一个线程, 就可以管理多个 socket针对 TCP 来说,服务器这边每次要服务一个客户端,都需要给这个客户端安排一个 socket一个服务器服务多个客户端, 同时就有很多个 socket. 这些 socket 上都是无事不刻的在传输数据嘛??? 很多情况下,每个客户端和服务器之间的通信也没那么频繁此时这么多 socket 大部分时间都是 静默的上面是没有数据需要传输的。 同一时刻只有少数的socket是活跃的如果每一个客户端都生成一个socket那么线程就多了系统开销就大了。 虽然单线程给 Redis 带来很多好处但还是有一个致命的问题对于单个命令的执行时间都是有要求的。如果某个命令执行过长会导致其他命令全部处于等待队列中迟迟等不到响应造成客户端的阻塞对于 Redis 这种高性能的服务来说是非常严重的所以 Redis 是面向快速执行场景的数据库。 所以我们应该避免像keys * 这样的操作。 你确实挺厉害如果能从第一篇看到这里的话。不过这些大多数是我自己复习的文章如果能帮到你是最好的谢谢。 下一篇如下
Redis -- String 字符串, 计数命令字符串操作-CSDN博客文章浏览阅读480次点赞18次收藏13次。Redis 的String字符串已经一些常用命令set ,get , mget , mset , setnx , setex, psetex。计数命令incr,decr,incrby,decrby,incrbyfloat。字符串操作append, getstrang,setstrange,strlen.https://blog.csdn.net/niceffking/article/details/135952746