一、Redis的事务管理
Redis的事务管理是基于乐观锁实现的,主要是为了保证事务的一致性;一旦开启事务后,Redis的所有命令都会进入到一个queue,只有commit,才会依次执行队列中的命令;事务必须在一个连接(Connection)中执行,通常Spring中会使用SessionCallback接口进行处理;
二、Redis的超时命令
Redis是基于内存存储数据的,所以Redis的数据存储能力是有限的;在实际开发过程中,开发人员应该操作Redis存储数据库中的热点数据;这时候需要缓存预热和超时命令;
Redis的key到期,不会立刻从内存中删除
有三种情况会移除过期的key:
1>当使用到这个key的时候,此时发现key过期了,就会删除;
2>Redis自带一个定时扫描器,默认频率是1次/s;
3>触发Redis的内存淘汰策略
三、Lua脚本
Redis是单线程模型的非关系型数据库,但是Redis的数据不一定是安全的,为了确保Redis的数据安全,Redis提供了一套Lua脚本,将一套业务操作封装到Lua脚本中,一起发送到Redis服务,Redis单线程执行这个脚本时,可以保证不会去执行其他客户端的命令,从而达到原子性的操作,保证数据的一致性;
Lua脚本可以通过Redis实现分布式锁的功能;
四、Redis的持久化
1>rdb:快照(默认行为)
快照就是将当前Redis内存数据结构直接保存到硬盘的一个文件中;
2>aof:只追加文件
记录用户所有的增删改操作的命令,写到硬盘文件中,当Redis服务重启时,直接根据aof文件依次执行这些增删改命令,从而达到恢复数据的目的
rdb与aof对比:
1、通常来说快照的恢复速度会远快于aof文件,但是aof文件相对rdb会更安全,因为aof最多只会丢失1S以内的数据,所以Redis在恢复数据的时候会优先恢复aof;
2、如果需要比较安全的做法,则同时开启rdb和aof,但是不能保证数据的绝对安全;
3、如果只是需要Redis作为缓存服务器使用,可以关闭rdb和aof,将Redis的性能提到最高;
4、rdb性能比aof要高,因为是快照,执行频率也比aof要低,rdb文件直接存储的是key-value的二进制形式,对于恢复速度也快,aof文件存储的是命令,恢复数据的时候需要逐行执行命令,所以恢复速度慢
五、Redis的内存回收策略
Redis有以下回收策略:
volatile-lru:从所有设置了超时时间的key中,选择一个最近最少被使用的key淘汰掉,如果没有课删除的key对象,会回退到noeviction策略
allkeys-lru:从所有的key中,选择一个最近最少被使用的key淘汰掉
volatile-lfu:从所有设置了超时时间的key中,选择一个总共最少被使用的key淘汰掉,如果没有课删除的key对象,会回退到noeviction策略
allkeys-lfu:从所有的key中,选择一个总共最少被使用的key淘汰掉
volatile-random:从所有设置了超时时间的key中,随机选择一个key淘汰掉,直到释足够的内存为止
allkeys-random:从所有的key中,随机选择一个key淘汰掉,直到释放足够的内存空间为止
volatile-ttl:从所有设置了超时时间的key中,选择一个存活时间最短的key淘汰掉,如果没有,就会回退到noeviction策略
noeviction(默认策略):redis内存满了之后,变成只读模式,拒绝所有写入的操作,并返回oom错误信息;
Redis非关系型数据库
最新推荐文章于 2022-09-28 14:55:40 发布