五种基础数据结构
-
String,存储简单字符
- 标志位
- 分布式锁
- 存储优惠卷剩余数量
-
List
- 关注列表,粉丝列表
- redis 实现轻量级消息队列使用list
-
Hash
- 类似HashMap
- 存储多key的消息,比如某个地区下面的活动信息,活动信息包含多个属性
-
Set
- 黑名单
- 白名单
- 提高交集操作
-
Sorted Set
- 排行榜
高级数据结构
- bitmap
- hyperlog
- geo
拓展
- 布隆过滤器
- cloud.tencent.com/developer/a…
- 布隆过滤器大key 问题,可以根据业务和用户规模制定key的规则
数据库与缓存读写一致性怎么保证?
- 更新数据库同时更新缓存,适合并发不高场景
- 先删除缓存再更新数据,再删除缓存
- 通过消息更新缓存,先更新数据
- 通过canal 等消息同步的方式保证数据一致
数据删除策略
noevication:当数据满了的时候,不再支持写操作。 默认allkeys-lru:所有的key 里面找最近最少未使用的allkeys-random:随机删keyvolatile-lru:在设置了过期时间的key 里面用lru算法找volatile-random:设置了过期时间的里面随机找volatile-ttl:找快过期的
缓存穿透、缓存击穿、缓存雪崩
穿透:数据库和缓存中都没有,然后一直攻击数据库
击穿:数据库中有、缓存中没有,给数据库增加压力
雪崩:缓存中大量key 过期,导致数据库服务遭受海量压力
解决:key 不过期,保证缓存和数据库双写机制
避免大key,避免大key 过期
SET 三剑客
set key valuesetnx key valuesetex key seconds value
什么是 I/O 多路复用?
Redis 线程模式是什么?什么是Reactor 模型?
什么是Redis 事务机制?
如何使用Redis 实现简易消息队列?
Redis 集群?
- 使用hash slot 去进行分片,redis 总把数据分为16384 个slot,对key 进行CRC 计算实现分片,降低数据redis 服务器压力
- 如何扩容
布隆过滤器实验?