- 1.redis的基本数据结构string
- 2.redis的基本数据结构list
- 3.redis的基本数据结构hash
- 4.redis的基本数据结构set
- 5.redis的基本数据结构zset
- Redis缓存更新策略:
- 缓存存在的问题:
//查询数据
keys *(支持模糊查询)
//写入
set key value
//读取
get key
//检查是否存在key
exists key
//删除
del key
//批量写入
mset key1 value1 key2 value2…
//批量读取
mget key1 key2 …
//如果key存在就不写入
setnx key value
//存入带有过期时间的数据
setex key time(int)(秒) value
//自增
incrby key int
//写入
lpush key value(链表的左侧写入)
rpush key value(链表的右侧写入)
//弹出
lpop key(左侧弹出)
rpop key(右侧弹出)
//获取list的长度
llen key
//获取指定范围的数据
lrange key start_index end_index
//读取指定下标的数据
lindex key index
//写入
hset key <
//获取value
hget key <>
//获取所有
hgetall key
set内部无序,不允许重复的key
//写入
sadd key value…
//读取一个
spop key
//读取全部
smembers key
//查询value是否存在
smembers key value
//获取长度
scard key
zset不允许重复key,按照写入的score排序
//写入
zadd key [score] value…
//删除value
zrem key value
//按照score排序列出
zrange key 0 -1
//按照score倒序列出
zrevrange key 0 -1
//长度
zcard key
java中操作Redis:
1.使用jedis
2.使用springDataRedis
1.查询数据库时:
先查询缓存,缓存中没有再查询数据库,然后把数据写入缓存,然后返回数据
2.修改数据库时:
先修改数据库,然后再删除缓存,确保两者的原子性
-
缓存穿透
- 原因:当多次访问缓存和数据库中都没有的数据时,会多次查询数据库,给数据库造成压力
- 解决方法:缓存空对象,做好数据格式的校验,加强用户权限的校验 -
缓存雪崩
- 原因:当很多热点数据的缓存同时过期,或者Redis宕机
- 解决方法:设置随机的过期时间,给Redis做集群,给业务添加多级缓存,给缓存业务添加降级限流 -
缓存击穿
- 原因:热点数据突然过期,因为重建耗时较长,在这段时间内大量的请求落到数据库,带来巨大冲击
- 解决办法:
- 1.给缓存重建过程加互斥锁(可能会导致死锁)
- 2.逻辑过期时间(开启一个新的线程去重建,其他线程不用等待,直接返回旧数据)



