redis持续化以及测试时用到的命令整理

1.redis持续化

前提:redis强大的功能很大部分是由于它把数据缓存在内存中

持续化的作用:最大可能性的保证在出现突发情况下(如:重启)数据不丢失,就需要以某种方式把数据持久化到磁盘中。Redis持久化的方式有俩种,RDB和AOF。

redis持续化的方式:RDB和AOF

RDB:快照方式,允许你每隔一段时间对内存数据做一次快照然后存储到硬盘中。该方式是Redis默认的持久化方式(可以通过在配置文件中配置时间或者改动键的个数来定义快照条件,编辑配置文件redis.conf)

理解:在一定的时间间隔内,将内存中文件保存至磁盘,时间间隔可以通过配置文件进行配置,以及可以配置在什么情况下(比如当几个内容发生改变时)进行保存

AOF:通过将发送到服务器的写操作命令记录下来追加到结尾,形成AOF文件,那么文件会原来越大,一些重复的写命令也会越来越多,但是redis提供了重写AOF文件的功能

tip:AOF在同步内存数据到磁盘上时,并不是马上把文件写如到磁盘中,而是先把文件缓存到系统,然后每隔30秒将文件写入到磁盘中,我们可以在配置文件中配置同步的策略

AOF同步过程: 

1、Redis 执行 fork() ,现在同时拥有父进程和子进程。 

2、子进程开始将新 AOF 文件的内容写入到临时文件。 

3、对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。 

4、当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。 

5、搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。

AOF重写的原理什么?为什么重写之后文件的大小会小于原来的AOF文件?

答案:AOF文件重写的原理:

AOF重写并不需要对原有AOF文件进行任何的读取,写入,分析等操作,这个功能是通过读取服务器当前的数据库状态来实现的。例子:

当前列表键list在数据库中的值就为["C", "D", "E", "F", "G"]。要使用尽量少的命令来记录list键的状态,最简单的方式不是去读取和分析现有AOF文件的内容,而是直接读取list键在数据库中的当前值,然后用一条RPUSH list "C" "D" "E" "F" "G"代替前面的6条命令。减少了重复的命令,所以重写后的AOF文件大小小于原有的AOF文件

AOF重写过程:

子进程在执行AOF重写时,主进程需要执行以下三个工作: 

1.执行client发来的命令请求;

2.将写命令追加到现有的AOF文件中;

3.将写命令追加到AOF重写缓存中

保证了数据的一致性

参考了:Redis之AOF重写及其实现原理:https://blog.csdn.net/hezhiqiang1314/article/details/69396887

2.redis数据库命令

①redis是可以设置远程连接,但是一般不会开放远程连接的权限,有不安全的隐患存在,则一般默认为本地连接即:127.0.0.1:6379(默认端口号)

②redis-cli连接成功后,默认选择数据库为0

获取数据库中的key

$ keys *

$keys BOR *(模糊匹配key)

④获取key对应value的长度,根据type类型不同,命令则不同

type = list $ llen key_name

type = string $ strlen key_name

type =hash $ hlen key_name

⑤python如何操作redis

import redis

#首先导入redis

redis_config = {"host":"127.0.0.1","port":6379}

#redis的配置,一般情况只需要host和port,端口默认的为6379,密码一般没有设置

redis_conn = redis.Redis(**redis_config)

#建立redis连接,基本过程与连接mysql数据库一致

values = redis_conn.get(key_name)

#获取key_name对应的值

mysql数据库连接步骤:

①导入模块

②建立连接

③获取游标

④游标进行操作,执行

3.redis命令

[list]类型的部分操作命令

【ttl 】以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

  $ttl key

lpush】将一个或多个值插入到列表头部,当key不存在时,自动创建key

  $lpush java.monitor.gpstojg {"type":"A"} {"type":"B"}

lpop】移出并获取列表的第一个元素

lrange】获取列表指定范围内的元素

  $lrange key_name 0 1

redis特性:数据类型为聚合类型时,即:lists,sets, Sorted Sets 和 Hashes,当key的值为空时,key都会被自动删除!

【string】

【set】设置指定 key 的值

   $set key value

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值