字符串、列表、集合、哈希、有序集合
字符串: 数字类、非数字类
数字类: INCR,DECR,INCRBY
非数字: GETRANGE,SETRANGE(截取字符串)
bloom: 散列到bit位,加入时bit置1【缓存穿透】
列表:
LPUSH LPOP RPUSH RPOP
(有序,访问中间元素的时间复杂度为O(n))
列表可以包含的元素数目?
2^32-1,大约4亿个元素
建议用在检索最近操作记录、最近通知这种地方
lpush a
ltrim 0 3[保存0-3元素,4或以后的会被修剪删除]
集合
无序(添加删除查存在O(1))不重复,可进行交集并集计算
打标签,登录检查
哈希
键值对
用于存储一些常用到的值,比如用户信息,比如菜单,省市区信息
100以内字段的可以存百万个对象
有序集合
排行榜、索引存储redis数据
Bitmaps【GETBIT SETBIT】压缩算法用
HyperLogLogs【计算一组数据中出现的不重复数值个数】
pfadd pfcount pfmerge
记录已用、未用、字符数组
常数级别获取长度,及时扩容避免溢出,减少内存重分配,空间预分配惰性释放,保存文本和二进制数据,兼容部分C函数
长度空间都要有,buf我要加到够。空间预分免溢出,惰性释放防泄漏。文本以及二进制,函数部分少克扣。
双向链表保存前驱节点和后继节点,长度,复制、释放、对比函数
(哈希表键值对有下节点指针),大小,掩码,数量
哈希算法,链地址法
渐进式rehash
用A、B两块,扩容收缩的时候会拷贝到另一块,数量多则会慢慢拷贝,查两张表,渐进完成,新数据会进入新表,拷贝完成后会进行释放
键和值都在64字节以内,键值对数量少于512
后继节点数组、跨度
后退指针,分值,成员
会先用长度短的,然后根据需要进行升级,只支持升级不支持降级,升级能够极大的减少内存消耗
一直查空数据导致redis一直不命中,每次都要到持久层进行查询
方案:
缓存宕机,大批数据同一时间缓存失效,存储层压力过大导致雪崩
方案:
热点key并发量非常大
方案:
分布式互斥锁
只允许一个线程重建缓存
可能会死锁
永不过期
可能会出现数据不一致的情况