参考:https://blog.csdn.net/diweikang/article/details/90264993
Redis 是线程安全的吗?
Redis 是个单线程程序,所以它是线程安全的。
Redis 单线程为什么还能这么快?
- redis 是基于内存的,内存的读写速度非常快
- redis 是单线程的,避免了不必要的上下文切换和竞争条件
- redis 使用多路复用技术,可以处理并发的连接。非阻塞 IO 内部实现采用 epoll,采用了 epoll + 自己实现的简单的时间框架。epoll 中的读、写、关闭、连接 都转化成了事件,然后利用 epoll 的多路复用特性,在 io 上没有浪费
redis 多路复用的理解
https://www.cnblogs.com/histlyb/p/12155934.html
开发中遇到一个这样的问题,统计一个页面的点击次数和平均停留时间。
想到用 redis 做暂存,后再通过定时器计算每天的数据量并入库。
但是多个请求下 redis 操作【点击次数】这样的数据,是否会有线程安全问题?
redis 是单线程运行,所以多个 redis 命令是一个一个执行,所以是线程安全的。
但是分开的两个 redis 命令,对于【应用】不是线程安全的,因为这两个 redis 命令之间会有其他的命令,就像 java 线程不安全的 i++ 操作,这两个 redis 命令没有事务管理
可以用 RPOP、LPUSH 和 INCR,或者 lua 脚本,实现多个 redis 操作合为一个命令,这样就对【应用】线程安全了。
redis 集群中的 master 是写库,slaver 是读库。每个 master 和 slaver 都有主线程,主线程负责接收请求,重定向请求到对应的服务器,同时对没有重定向的请求,放到队列中由子线程处理。
https://www.cnblogs.com/liuqing576598117/p/10593787.html
标签:命令,epoll,单线程,访问,redis,安全,线程 From: https://www.cnblogs.com/lili-xia/p/12505228.html