基本数据类型
String
List
Hash -- 类似map
Set -- 无序,不能重复
Sort Set -- 有序,不能重复,要传个分数作为排序
setnx
setnx「SET if Not eXists」和expire合成一条指令
Lua
支持Lua脚本,例如同IP下1秒内只能调用一次
持久化
RDB, 快照形式写入磁盘,实际是通过fork一个子进程去执行,只能存一段时间
AOF, 以日志的形式记录redis的一系列操作,AOF的运行效率要慢于RDB
缓存雪崩
解释:同一时间缓存大面积失效,同时又有大批流量进来,数据直接打到了DB上,redis像没有一样,例如在物流系统中客户(收货人,发货人以及通知人)和港口是热点数据,哪里基本都会用到,如果在同一时间缓存失效,刚好又是旺季,直接就全打到了DB上。
解决:缓存的时候,对失效时间加个随机值
缓存穿透
解释:缓存和数据库中没有这个数据,如果接口一直请求就一直是打到DB上查询的,并且是恶意频繁请求,有可能直接搞崩
解决:对接口参数做校验
缓存击穿
解析:对于某一个缓存热点数据进行不断的请求,当缓存热点数据失效的瞬间,大批量的请求直接打到了DB上,容易出问题
解决:设置热点数据为永久存储,或加互斥锁
淘汰策略
FIFO,淘汰最早数据
LRU,剔除最近最少使用
LFU,剔除最近使用频率最低等
Bitmap
位图是⽀持按 bit 位来存储信息,可以⽤来实现 布隆过滤器(BloomFilter);
应用场景:1. 垃圾邮件过滤 2. 百度爬虫爬过的url就不用再爬
java实现
jedis、lettuce