redis
2024-07-05 21:25:46 1 举报
AI智能生成
登录查看完整内容
redis
作者其他创作
大纲/内容
redis基于内存,内存的操作速度快
redis底层数据结构是一个哈希表
redis为什么快
主从模式
哨兵模式在主从模式基础上加哨兵节点监控主从服务器,,当主节点发生故障时,哨兵节点会自动从从节点中选取出一个新的主节点,并通知其它从节点和客户端实现故障转移
哨兵模式
通过数据分片实现负载均衡和高可用模式,redis将多个数据分布在不同的节点上,,每个节点负责一部分数据,称为槽位,,通过数据分片实现更大规模的存储
cluster模式
redis集群模式有哪些
整型(int)
C语言字符串的缺陷 获取字符串长度是0(n) 除了字符串末尾以外 字符串不能够含有\"\\0\"字符串 不能保存图片 音频 视频等二进制数据,c语言字符串操作函数不是很安全,稍微不注意就容易缓冲区溢出
embstr编码的简单动态字符串
字符串长度超过45时为该类型
raw编码的简单动态字符串
计算器
String
用一个字典表示2个hash表来进行rehash扩容
哈希表
压缩表
hset hincrby hlen hdel hgetall
电商购物车
hash
双端链表
可用实现栈,队列阻塞队列
lpush rpush lpop rpop lrange key start stop blpop brpop (如果没有数据阻塞等待 可以设置等待时间 设置为0 一直等待)
微博微信信息流
list
整型的数组集合
sadd srem smembers scard sismember sdiff sinter sunion
抽奖 点赞,关注 共同关注
set
子主题
有可能用压缩列表(0(N))有可能用跳表(0Log(N) 跳表是在链表上面加了冗余的索引层
排行榜
zset
redis支持的数据类型和应用场景
优点恢复大数集数据比aof快
在指定的时间内间隔内,把内存的数据集快照写入磁盘,二进制压缩文件执行bgslave命令触发异步快照,执行sava同步快照会阻塞客户端的运行
RDB
更加稳定数据的完整性更好
记录服务器接收到的所有写操作命令并且把这些命令追加到文件里面持久化到磁盘
AOF
redis的持久化机制
当redis访问的时候才会去判断是否过期,过期则删除 缺点占用内存
惰性过期策略
redis每隔一段时间随机检查设计过期时间的键
定时过期策略
redis的过期策略
lru 最近最少使用
优先删除过期时间最短的
volatile-ttl (根据过期时间优先)
volatile-random (设置过期时间的随机删除)
allkeys-lru (从所有键中选择最近最少使用的)
allkeys-random (全局随机删除)
redis内存淘汰策略
redis和数据库只能保证最终一致性 可用通过cannel等来做,高并发下无论先更新后删除 还是更新后更新缓存 都会有不一致情况,一般公司选择先更新数据库再删除缓存
如何解决redis和数据库数据不一致问题
slave服务器连接maste并发送sync命令,master收到命令后会生成数据快照,然后把数据快照发送给slave节点,slave节点在收到数据后丢弃旧的数据并且重新载入新的数据
全量复制
master收到数据变更后,会把变更的数据同步给slave节点,maste和slave都会维护一个复制偏移量,用来表示master向slave传递的字节数量
增量复制
redis主从复制原理
首页根据当前redis的内存数据重新构建一个新的AOF文件,,然后读取当前数据写入到新的AOF文件中,,重写完成后去覆盖现有的AOF文件,,redis会根据键值的数据再去生成对应的新的指令,,这样比较耗着redis会放在子进程处理,,主进程数据变化会追加到AOF的重写缓冲区里面,等待AOF重写完成后再把AOF重写缓冲区里面的数据追加到AOF文件中
AOF重写机制
multi
执行队列中的所有命令
exec
中断当前事务,然后清空事务队列并放弃执行事务
discard
watch key1 key2
开启multi命令后,命令语法导致执行错误会放弃当前所有队列中的命令
开启multi命令后,命令逻辑执行错误,会主动忽略报错语句,继续执行后面语句
redis是支持事务的
redis事务保证队列中命令作为一个整体 要么全部执行,要么全部不执行,但如果因为命令逻辑错误而执行失败,会继续执行后面的操作,而不会回滚
原子性
无隔离级别
redis事务支持ACID特性吗
redis rehash
select调用时内核需要遍历整个位图,检查每个文件描述符是否就绪,这种轮询方式在连接很少时很有效 当连接数量增加时性能就会降低,由于使用位图来保存描述符还有数量的限制一般支持2048个 select跨平台性比较好
poll使用链表来表示文件描述符的状态没有最大连接数的限制和select 一样需要轮询来获取就绪的描述符,因此随着监视的描述符数量增长其效率也会降低
epoll使用事件驱动模型没有数量限制,他将文件描述符添加到epoll事件集合中,等待事件的发生,他与select poll不同时epoll不需要轮询,他使用回调的方式只关注真正发生的事件描述符,epoll适合连接数较多大规模并发场景下
select poll和epoll区别
如何保证redis分布式锁可重入
redis分布式锁
redis
0 条评论
回复 删除
下一页