【Redis运维】Redis各版本特性对比
一、Redis 4 主要特性
二、Redis 5 主要特性
三、Redis 6 主要特性
面向网络处理的IO多线程:Redis 6.0最受关注的新特性,因为在之前版本中Redis一直是单线程架构,虽然有些命令可以用后台线程或子进程执行(比如快照生成、AOF 重写),但是从网络IO处理到实际的读写命令都是单个线程完成的,随着网络硬件性能提升,主线程处理网络请求的速度跟不上底层网络硬件的速度,性能瓶颈可能会出现在网络IO上。Redis 6.0的这个新特性可以提高Redis网络请求处理的速度,当有客户端请求时,主线程会把这些连接放在一个等待队列中。然后通过轮询方法把连接分配给多个IO线程。主线程一旦进入IO分配阶段后就会进入阻塞状态,等待多个IO线程完成客户端的请求,由于多个 IO 线程并行处理,这个过程很快就可以完成。等IO线程解析完请求,主线程还是会以单线程的方式执行后续的命令操作。所以说Redis 6.0的多IO线程只是用来处理网络请求的,对于读写命令仍然是单线程处理。因为多个IO线程并行处理解决了网络瓶颈问题,也一定程度提升了Redis的整体性能。至于为什么读写操作仍然使用单线程,是因为这样的设计可以不用去为了保证事务的原子性而额外的去开发多线程互斥机制
客户端缓存:Redis 6.0新增的另一重要特性就是客户端缓存功能,也称为跟踪(Tracking)功能。可以让业务应用中的客户端把读取到的数据缓存在应用本地,这样应用就可以直接在本地快速读取数据了。当本地缓存数据被修改或是失效了,还支持普通模式(CLIENT TRACKING )和广播模式(CLIENT TRACKING ON BCAST PREFIX ...)2种通知方法做失效处理。不过这2种通知方法都需要客户端使用RESP 3 协议,它是6.0新启用的通信协议
细粒度的权限控制:在Redis 6.0之前,只有一个密码设置作为安全防护手段。对于一些高风险命令(例如 KEYS、FLUSHDB、FLUSHALL 等)也只能通过 rename-command 重命名进行规避。而在Redis 6.0以后提供了ACL权限控制,支持创建不同用户并配置不同权限,避免所有客户端使用同一个密码进行登录使用。以更细粒度的控制不同用户的访问权限,加强了 Redis 的安全保护
ACL SETUSER tanglu on > 123456 #使用ACL SETUSER命令创建tanglu用户,密码为123456 ACL SETUSER tanglu +@hash -@string #tanglu只能使用hash类命令,禁止string命令 ACL SETUSER tanglu ~user:* +@all #tanglu对user:开头的key有所有操作权限,波浪号表示开始声明前缀
RESP 3 协议的使用:支持多种数据类型的区分编码,包括空值、浮点数、布尔值、有序的字典集合、无序的集合等。所谓区分编码,就是指直接通过不同的开头字符区分不同的数据类型,让客户端可以直接通过判断传递消息的开头字符来实现数据转换操作了,提升了客户端的效率。除此之外,RESP 3 协议还可以支持客户端以普通模式和广播模式实现客户端缓存。
四、Redis版本升级建议
评论