Redis笔记

本文详细探讨了Redis的键操作以及其持久化机制,包括RDB和AOF。介绍了Redis如何处理一次性返回所有key可能导致的卡顿问题,以及分批执行的策略。同时,文章讲解了Redis锁的互斥性和安全性,并讨论了可能出现的死锁情况。此外,还通过实例展示了发布订阅功能的工作原理,以及如何利用JAVA定时器进行定期备份。最后,文章提到了主从复制在高可用性方面的不足,并提出了解决方案。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
能存储512M
二进制安全,意味着可以存储图片,视频,音频等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

批量生成redis测试数据

1.Linux Bash下面执行

  for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;

  生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中

2.用vim去掉行尾的^M符号,使用方式如下::

  vim /tmp/redisTest.txt

​    :set fileformat=dos #设置文件的格式,通过这句话去掉每行结尾的^M符号

​    ::wq #保存退出

3.通过redis提供的管道--pipe形式,去跑redis,传入文件的指令批量灌数据,需要花10分钟左右

  cat /tmp/redisTest.txt | 路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号 --pipe

在这里插入图片描述

在这里插入图片描述

一次性返回所有的key,会造成卡顿。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分批次执行,消耗时间长,返回的游标可能大,可能小,返回的数据可能有重复数据,需要在程序中手动处理,如:放入set中去重。但是对服务器压力小。

Java开发包:

在这里插入图片描述

在这里插入图片描述

互斥性:

任意时刻,只能有一个客户端获取锁。

安全性:锁只能被持有该锁的客户端释放,不能由其他客户端释放。

死锁:获取锁的客户端由于某些原因宕机,未能释放锁,其它客户端再也不能获取锁。

容错:当部分节点宕机,客户端仍然能够获取锁和释放锁。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设置2秒的过期时间。

在这里插入图片描述

在这里插入图片描述

缺点:若是刚好执行到setnx,获得锁,还未来得及给锁增加过期时间,就完了。

虽然Redis操作是原子性的,但是,这两步分先后执行就不是了。

在这里插入图片描述

在这里插入图片描述

需要等到10秒后才能执行成功。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不想通过sleep机制去重试。
在这里插入图片描述
两个客户端模拟生产者,消费者:
客户端一:
在这里插入图片描述
此时会等待30秒。
客户端二:
在这里插入图片描述
此时,客户端一:
在这里插入图片描述
End
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
演示发布订阅是如何工作的:
两个myTopic订阅者:
在这里插入图片描述
在这里插入图片描述
一个anotherTopic订阅者:

在这里插入图片描述
一个生产者:

在这里插入图片描述
前两个myTopic订阅者:
在这里插入图片描述
发布者再生产一个消息:
在这里插入图片描述
订阅者:
在这里插入图片描述
在这里插入图片描述
也就是说,发布消息的时候,订阅者不在线,当订阅者再次登录的时候,收不到该消息。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
900秒内,有一次写入,就进入备份。
在这里插入图片描述
当备份进程出错的时候,主进程停止接收新的写入操作。
保护持久化数据一致性。
如果业务系统有完善的监控系统,可以关闭。
在这里插入图片描述
在备份的时候,将rdb文件压缩。
在这里插入图片描述
一般设置为no
禁用rdb配置:
在这里插入图片描述
在save后,添加上图一行,就禁用了rdb配置。
在这里插入图片描述
在这里插入图片描述
Save会阻塞主线程,知道rdb结束。
BGSave会fork出一个子进程创建RDB文件,记录当时数据库状态,父进程继续处理接收到的命令,子进程完成后,会发送信号给Redis主进程,主进程在处理命令的同时,通过轮询接收子进程的信号。BGSave使用后台的方式保存RDB文件,调动此命令后,会立即返回OK返回码,同时fork出一个子进程处理,并立刻恢复对客户端的服务,在客户端可以通过lastSave指令查看操作是否成功,它记录了上一次执行save或BGSave成功的时间。
实践:
在这里插入图片描述
客户端被卡住一段时间,dump.rdb文件重新生成,服务恢复正常。
在这里插入图片描述
在这里插入图片描述
BGSave生成rdb文件:
在这里插入图片描述
可以通过JAVA的定时器定期调用Redis的BGSave指令,备份rdb文件,并按照时间戳存储不同的rdb文件,作为Redis某段时间的全量备份脚本。
如:发现lastsave改变后,调用
在这里插入图片描述
Xxxxx代表时间戳,用来区分不同时间段的全量备份文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Aof默认是关闭的,通过设置配置使其生效:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
能够接受这三个参数。
Always:一旦缓存区的内容发生变化,总是及时地将缓存区的内容写入到aof当中。
Everysec:每秒一次
No:将写入aof的调用交给操作系统决定,一般为了提高效率,只有缓存区被填满,操作系统才会开始同步数据到磁盘当中。
推荐everysec。
当Redis关闭时:
在这里插入图片描述
在这里插入图片描述
重启服务的时候,
在这里插入图片描述
若是:
在这里插入图片描述
只有等服务打印:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Aof可以手动触发。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先rdb,速度快,再使用aof增量更新。
在这里插入图片描述
在这里插入图片描述

 批量生成redis测试数据
1.Linux Bash下面执行
  for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;
  生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
2.用vim去掉行尾的^M符号,使用方式如下::
  vim /tmp/redisTest.txt
    :set fileformat=dos #设置文件的格式,通过这句话去掉每行结尾的^M符号
    ::wq #保存退出
3.通过redis提供的管道--pipe形式,去跑redis,传入文件的指令批量灌数据,需要花10分钟左右
  cat /tmp/redisTest.txt | 路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号 --pipe

在这里插入图片描述
在这里插入图片描述

追求弱一致性,不需要每时数据都一致,只需要保证最终数据是趋于一致的,也就是最终一致性。
主从同步和从从同步
第一次同步时,主节点做一次BGSave,同时将后续修改操作进入到内存buff中,将rdb文件全量同步到从节点中,从节点接受后,将rdb数据加载到内存中,加载完成后,通知主节点,将期间修改的操作记录和增量数据同步到从节点。

在这里插入图片描述
在这里插入图片描述
主从的缺点:不具备高可用行,当master挂掉后,不能做写操作。
解决方案:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际中,虚拟节点为32或者更大。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值