Redis基本原理了解

Redis事务控制

1,概念:

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰。一个队列中,一次性、顺序性、排他性的执行一系列命令

2,事务基本操作

开启事务:

multi

作用: 设定事务的开启位置,次指令执行后,后续的所有指定都加入到当前事务中。

执行事务:

exec

作用: 设置事务的结束位置,同时执行事务,exec必须与multi成对使用。在exec和multi之间的命令只是存在了一个任务队列中,实际并没有执行,只有执行了exec命令后,队列中的命令才会顺序执行
取消事务:

discard

作用: 终止当前事务的定义,发生在multi和exec之前。如果取消了事务之后再执行exec,则会报错:(error) ERR EXEC without MULTI

Redis缓存淘汰策略

   redis默认的最大内存(maxmemory)设置为0,相当于基于物理内存的最大值。

# redis maxmemory 动态设置及查看命令示例

# 动态修改 maxmemory
config set maxmemory 10GB

# 查看 maxmemory
config get maxmemory
info memory | grep maxmemory

redis-cli -h 127.0.01 -p 6379 config get maxmemory

1,八大淘汰策略
项目 Value
noeviction 默认策略,不淘汰数据,大部分写命令都将返回错误(DEL除外)
allkeys-lru 从所有的数据中根据LRU算法挑出数据进行淘汰
volatile-lru 从设置了过期时间的数据中根据LRU算法淘汰数据
allkeys-random 从所有的数据中随机挑选数据淘汰
volatile-random 从设置了过期时间的数据中随机淘汰数据
volatile-ttl 从设置了过期时间的数据中,挑选越早过期的数据进行删除
allkeys-lfu 从所有的数据中根据LFU算法挑选数据淘汰(4.0>=版本可用)
volatile-ifu 从设置了过期时间的数据中根据LFU算法挑选数据淘汰(4.0>=版本可用)

一张图概括:
在这里插入图片描述

2,主要算法
  • LRU:最近最少使用的key,根据时间,最不常用的淘汰。
  • LFU:最近最少使用的key,根据计数器,用的次数少的key淘汰。
  • Random:随机淘汰。
  • TTL:快要过期的先淘汰。

Redis持久化

一:Redis持久化的实现方式
1,Redis持久化是什么?

    因为Redis是基于内存的数据库,一旦断电,所有的实例都会关机,因此所有的数据也会丢失,在运行期间,可以通过开启Redis持久化功能,将数据写入磁盘,供实例重启的时候,恢复数据。Redis持久化主要是通过AOF和RDB实现。

2,AOF是什么?

    AOF持久化主要是在Redis修改相关的命令执行后,将执行命令添加到aof_buf缓存区(aof_buf是Redis中的SDS结构,可以理解为C语言中的字符串扩展)的末尾,然后在每次事件循环结束后,根据appendfsycn的配置(always是每次事件循环后都将aof_buf内的数据写入,everysec是每秒写入,no是根据操作系统来决定何时写入),判断是否将aof_buf写入到AOF文件。生产环境一般默认配置是:everysec。

struct redisServer {
   
 /* AOF buffer, written before entering the event loop */
 sds aof_buf;//aof_buf缓冲区其实就是Redis的一个简单动态字符串
 }
struct sdshdr {
   
    unsigned int len;
    unsigned int free;
    char buf[];
};

事件循环可参考:https://blog.csdn.net/MOU_IT/article/details/115430555

3,RDB是什么?

概念:
    RDB是在满足一定的触发条件时(在一个时间间隔内修改命令达到一定数据 | 手动执行SAVE和BGSAVE命令),Redis对数据库内的所有键值对信息生成一个压缩文件dump.rdb,如果dump.rdb已经存在,则用新的替换旧的。Redis默认情况下,RDB开启,AOF关闭。
实现原理
    实现原理是fork一个子进程,然后对键值对进行遍历,生成rdb文件,在生成过程中,父进程会继续处理客户端发送的请求,当父进程要对数据进行修改时,会对相关的内存页进行拷贝,修改的是拷贝后的数据。(也就是COPY ON WRITE,写时复制技术,就是当多个调用者同时请求同一个资源,如内存或磁盘上的数据存储,他们会共用同一个指向资源的指针,指向相同的资源,只有当一个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给这个调用者,其他调用者还是使用最初的资源,在CopyOnWriteArrayList的实现中,也有用到,添加或者插入一个新元素时过程是,加锁,对原数组

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值