redis数据结构有哪些?
对象类型
字符串
列表
集合
有序集合(排名)
字典
位图(签到)
地理空间
=-=================
数据结构
动态字符串
hash表
链表
跳跃表
整数集合
压缩列表
Redis缓存穿透,缓存雪崩?
穿透
使用互斥锁排队
接口限流与熔断、降级
布隆过滤器
雪崩
缓存在同一时间内大量键过期(失效),接着来的一大波请求瞬间都落在了数据库中导致连接异常。
加锁排队
建立备份缓存(源数据不可用),缓存A和缓存B,A设置超时时间,B不设值超时时间,先从A读缓存,A没有读B,并且更新A缓存和B缓存
设置缓存超时时间的时候加上一个随机的时间长度,比如这个缓存key的超时时间是固定的5分钟加上随机的2分钟,酱紫可从一定程度上避免雪崩问题;
如何使用Redis来实现分布式锁?
利用setnx+expire命令 (错误的做法)
使用Lua脚本(包含setnx和expire两条指令)
主从同步数据丢失
Redis的并发竞争问题如何解决?
利用redis自带的incr命令,
可以使用独占锁的方式,
使用乐观锁的方式进行解决
针对同一key的资源,就先进行加锁
redis的setnx实现内置的锁。
Redis持久化的几种方式,优缺点是什么,怎么实现的?
RDB
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000
AOF
appendfsync always
appendfsync everysec
appendfsync no
Redis的缓存失效策略?
1.避免集中失效
Redis集群,高可用,原理?
- 哨兵
- 主从
3.cluster - proxy
Redis缓存分片?
服务端:cluster
客户端:shard
Redis的数据淘汰策略?
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
redis队列应用场景?(AP)
1、redis队列模式:可以实现B系统不在线状态下,A系统向队列中存数据,当B系统上线后,可以手动去取队列中的数据;
2、redis订阅模式:可以实现A系统向队列中存数据,当B系统订阅了此队列并且在线时,可以自动监听此队列去取数据,但之前不在线时的数据无法获取;
日志传输,不是高可靠的
分布式使用场景(储存session)?
session
分布锁,重入锁,redlock,获取释放原子操作,是否拥有锁
消息队列
定时任务
网友评论