redis 两种固化方式
Redis DataBase(简称RDB) 间隔时间和变更次数决定
优点:单独子进程来持续优化,主进程不会有任何IO,不影响redis的高可用性
缺点:间隔一段时间进行持久化,如故障会发生数据丢失
Append-only file (简称AOF)
优点:保持更高的数据完整性
缺点:AOF文件比RDB文件大,且恢复速度慢 较大的IO开支
策略: master AOF 确保完整性
slave rdb
redis 查找key 的办法
keys 如果比较多会阻塞
scan 无阻塞的取出指定模式的key列表
HGETALL key
起始版本:2.0.0
时间复杂度:O(N) where N is the size of the hash.
返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍
可以了解到命令HgetAll的时间复杂度为O(n)。这意味着Hash的field越多,当使用HgetAll获取全量数
据时,性能越差,该命令的性能与field字段的数量成正比。
遇到问题后,上网查询资料,解决方案大致两种:
1) 借助MemCached
2) 新增一个field字段,将原Redis key对应的所有数据信息全部存储在该filed中,然后使用Hmget命令代替HgetAll
但是以上两种方案,均存在各种弊端,并没有从根本上解决问题。找公司其他部门技术大拿交流,最终讨论出以下方案解决问题:
通过使用Redis dump命令获取到Redis序列化后的值,获取到的是字节数组。在应用中将该字节数组按照Redis协议自行解析成需要的HashMap数据。
方案优点:
1) dump命令的时间复杂度为O(1),性能优于HgetAll
2) 将字节数组的解析由Redis服务器转移到了应用服务器,减轻了Redis 服务器CPU的运算压力
3) 充分利用了应用服务器的CPU,并且应用服务器方便扩容。