当前位置: 首页 > news >正文

Redis实战精讲(3)

视频链接:https://www.bilibili.com/video/BV1Uz4y1X72A
视频选集:P34

文章目录

  • 1.redis的配置文件
    • 1.1 redis配置文件中关于网络的配置
    • 1.2 常规配置
    • 1.3 安全配置
  • 2.redis的持久化
    • 2.1 RDB策略
    • 2.2 AOF策略
    • 2.3 小结
  • 3.redis的事务
    • 3.1 multi & exec
    • 3.2 discard
    • 3.3 watch & unwatch
    • 3.4 总结
  • 4.redis消息的发布与订阅
    • subscribe & publish & psubscribe
  • 5.redis的主从复制
    • 5.1 搭建一主二从redis集群---搭建三台redis服务
    • 5.2 通过redis客户端分别连接三台redis服务
    • 5.3 查看三台redis服务在集群中的主从角色
    • 5.4 设置主从关系
    • 5.5 全量复制 & 增量复制 & 读写分离 & 主机宕机 & 主机恢复 & 从机宕机
    • 5.6 从机恢复 & 从机上位 & 主机恢复
  • 6.redis的哨兵模式
    • 6.1 搭建一主二从的集群架构
    • 6.2 提供哨兵配置文件
    • 6.3 启动哨兵服务
    • 6.4 主机宕机
    • 6.5 之前主机恢复
  • 7.Jedis操作Redis
    • 7.1 Jedis操作key
    • 7.2 Jedis操作字符串(string)类型数据
    • 7.3 Jedis事务
  • 8. redis的客户端连接工具

1.redis的配置文件

  • 在redis根目录下提供redis.conf配置文件;可以配置一些redis服务端运行时的一些参数;
  • 如果不使用配置文件,那么redis会按照默认的参数运行
  • 如果使用配置文件,在启动redis服务时必须指定所使用的配置文件

1.1 redis配置文件中关于网络的配置

  • port:指定redis服务所使用的端口,默认使用6379。
  • bind:配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上任何一个ip都可以;
    一般情况下,都会配置一个ip,而且通常是一个真实。
  • 如果配置了port和bind,则客户端连接redis服务时,必须指定端口和ip:
    连接:redis-cli -h 192.168.11.128 -p 6380
    关闭:redis-cli -h 192.168.11.128 -p 6380 shutdown
  • tcp-keepalive:连接保活策略

1.2 常规配置

  • loglevel:配置日志级别
    开发阶段可以设置成debug,生产阶段通常设置为notice或者warning.
  • logfile:指定日志文件
    redis在运行过程中,会输出一些日志信息;默认情况下,这些日志信息会输出到控制台;我们可以使用logfile配置日志文件,使redis把日志信息输出到指定文件中
  • databases:配置redis服务默认创建的数据库实例个数,默认值是16

1.3 安全配置

  • requirepass :配置Redis的访问密码。默认不配置密码,即访问不需要密码验证。
  • 此配置项需要在protected-mode=yes时起作用
  • 使用密码登录客户端: redis-cli-h ip -p 6379 -a pwd

2.redis的持久化

  • redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后, redis 数据库里的所有数据将会全部丢失.为了解决这个问题, redis提供了持久化功能——RDB和AOF(Append Only File)
  • redis的持久化: redis提供持久化策略,在适当的时机采用适当手段把内存中的数据持久化到磁盘中,每次redis服务启动时,都可以把磁盘上的数据再次加载内存中使用。

2.1 RDB策略

  • 在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作
  • RDB策略是redis默认的持久化策略,redis服务开启时这种持久化策略就已经默认开启了
  • save < seconds > < changes >:配置持久化策略
  • dbfilename:配置redis RDB持久化数据存储的文件
  • dir:配置redis RDB持久化文件所在目录

默认的策略

  • 1分钟内改变了1万次
  • 或者5分钟内改变了10次
  • 或者15分钟内改变了1次

2.2 AOF策略

  • 采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的指令。
  • 效率低下, redis默认不开启AOF功能。
  • appendonly:配置是否开启AOF策略
  • appendfilename:配置操作日志文件

2.3 小结

根据数据的特点决定开启哪种持久化策略;一般情况,开启RDB足够了

3.redis的事务

事务:把一组数据库命令放在一起执行,保证操作原子性,要么同时成功,要么同时失败。
Redis的事务:允许把一组redis命令放在一起,把命令进行序列化,然后一起批行,保证部分原子性

3.1 multi & exec

multi作用:用来标记一个事务的开始
exec作用:用来执行事务队列中所有的命令
在这里插入图片描述
注意:redis的事务只能保证部分原子性
a.如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事务的原子性。

multi
set k3 v3
seta kk vv
set k4 v4
exec

b.如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其它命令的执行,不能够保证事务的原子性。

multi
set k3 v3
incr k1
set k4 v4
exec

3.2 discard

作用:清除所有已经压入队列中的命令,并且结束整个事务

3.3 watch & unwatch

watch 作用:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则,正常执行
unwatch 作用:放弃监控所有的键

3.4 总结

1、单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键
2、不保证事务的原子性: redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis 已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis 不需要事务回滚的能力。

4.redis消息的发布与订阅

客户端到客户端的通信:redis客户端订阅频道,消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到消息。

subscribe & publish & psubscribe

subscribe 作用:订阅一个或者多个频道的消息
publish 作用:将消息发布到指定频道
psubscribe 作用:订阅一个或者多个频道的消息,频道名支持通配符

5.redis的主从复制

主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主
主少从多、主写从读、读写分离、主写同步复制到从。

5.1 搭建一主二从redis集群—搭建三台redis服务

使用一个redis模拟三台redis服务:

  • 提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
    在这里插入图片描述
    修改三份配置文件:以redis6379.conf为例,修改下面的五个参数
    -bind 127.0.0.1
    -port 6379
    -pidfile /var / run/ redis_6379.pid
    -logfile “6379.log”
    -dbfilename dump6379.rdb

  • 分别使用三个redis配置文件,启动三个redis服务
    redis-server redis6379.conf &
    redis-server redis6380.conf &
    redis-server redis6381.conf &

5.2 通过redis客户端分别连接三台redis服务

redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381

5.3 查看三台redis服务在集群中的主从角色

info replication
默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机
在这里插入图片描述
先在6379进行写操作:set k1 v1
三台redis服务互相独立,互不影响

5.4 设置主从关系

设从不设主
在6380上执行:slaveof 127.0.0.1 6379
在这里插入图片描述
在6381上执行:slaveof 127.0.0.1 6379
在这里插入图片描述

5.5 全量复制 & 增量复制 & 读写分离 & 主机宕机 & 主机恢复 & 从机宕机

  • 全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库。
    在6380和6381上执行:keys *

  • 增量复制:主库写数据会自动同步到从库
    在6379上执行:set k2 v2
    在6380和6381上执行:keys *

  • 读写分离:主写从读

  • 主机宕机:从机原地待命
    关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
    查看6380和6381服务的主从角色:info replication

  • 主机恢复:一切恢复正常
    重启6379服务: redis-server redis6379.conf &
    客户端连接6379: redis-cli -h 127.0.0.1 -p 6379

  • 从机宕机:主机少一个从机,其它从机不变
    关闭6380服务:redis-cli -h 127.0.0.1 -p 6380 shutdown
    查看6379服务的主从角色: info replication
    查看6381服务的主从角色: info replication

5.6 从机恢复 & 从机上位 & 主机恢复

  • 从机恢复:需要重新设置主从关系
    重启6380服务: redis-server redis6380.conf &
    客户端连接6380: redis-cli -h 127.0.0.1 -p 6380
    在6380上执行:slaveof 127.0.0.1 6379
  • 从机上位:从机断开原来主从关系,然后重新设置主从关系
    在6380上执行:slaveof no one
    查看6380服务的主从角色: info replication
  • 主机恢复:之前的主机恢复,但没有任何的从机

注意:一台主机配置多台从机,一台从机又可以配置多台从机,从而形成一个庞大的集群结构。减轻一台主机的压力,但是增加了服务间的延迟时间。(只要有从机身份就不能进行写操作)

6.redis的哨兵模式

主机宕机,从机上位的自动版

6.1 搭建一主二从的集群架构

按照5中的步骤

6.2 提供哨兵配置文件

在redis安装目录下创建配置文件:redis_sentinel.conf

写下内容:sentinel monitor dc-redis 127.0.0.1 6379 1
表示:指定监控主机的 ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)

6.3 启动哨兵服务

redis-sentinel + 配置文件名字
注:在这里为redis-sentinel redis_sentinel.conf
在这里插入图片描述

6.4 主机宕机

关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
哨兵程序自动选择从机上位

6.5 之前主机恢复

重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379

7.Jedis操作Redis

使用Redis,官方推荐的Jedis,在java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以方法的形式出现。

7.1 Jedis操作key

public class JedisKeyTest {
	public static void main(String[] args){
		//连接redis
		Jedis jedis=new Jedis( host: "192.168.40.130",port: 6379);
		//使用jedis对象操作redis服务

		//ping
		String ret=jedis.ping();
		System. out.println (ret) ; 

		//keys
		Set<String> keys=jedis.keys( pattern: "*");
		for(String key : keys){
			System.out.println(key);
		}
		
		//exists
		Boolean ret=jedis.exists( key: "k2");
		System.out.println(ret) ;

		//move
		Long ret = jedis.move( key: "k2" ,dbIndex: 1);
		System. out. println(ret) ;
	}
}

7.2 Jedis操作字符串(string)类型数据

public class JedisStringTest {
	public static void main (String[] args){
		//连接redis服务
		Jedis jedis=new Jedis( host: "192.168.40.130",port: 6379);
		//使用jedis对象对redis字符串类型的数据进行操作
		String ret=jedis.set("k4","v4"):
		System.out.println(ret) ;
		
		String ret=jedis.get("k4");
		System.out.println(ret);

		//追加
		Long ret=jedis.append("k4", " abc"");
		System.out.printin(ret);

		//数字加1
		Long ret=jedis.incr( key: "k5");
		System.out.println(ret) ;
	}
}

7.3 Jedis事务

public class JedisTransactionTest {
	public static void main(String[]args) {
		//连接redis服务
		Jedis jedis=new Jedis( host:"192.168.40.130",port: 6379);
		//获取事务的对象
		Transaction tran=jedis.multi();
		tran.set ("k6","v6");
		tran.set ("k7","v7");
		tran.exec();
	}
}

8. redis的客户端连接工具

redis-desktop-manager

相关文章:

  • Flink(二)
  • 全息干涉图补零尺寸与三种重构方法重建像间的关系研究
  • Vue2(十三):路由的使用及注意点、嵌套路由、路由的query和params参数、props配置
  • 如何增强 ABAP 系统,允许开发人员给 ABAP 对象设置标签,方便快速检索
  • 【Python】面向对象 -没有对象?new一个吧
  • ELK集添加安全认证
  • 智能家居离线语音识别控制系统设计(SU-03T)
  • 商家如何玩好“种草神器”?小红书KOL达人种草这样做
  • 基于共词分析的中国近代史实体关系图构建(毕业设计:图数据渲染)
  • 猿创征文|阿里云MaxCompute存取性能测试报告
  • Spring Cloud Sleuth在分布式中进行日志跟踪
  • Jmeter分布式部署执行和常见报错
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • Python Web开发 之 学生管理系统(2)[实现筛选,搜索,分页]
  • 程序员转型?不可能,绝对不可能
  • 【刷算法】求1+2+3+...+n
  • ECMAScript6(0):ES6简明参考手册
  • IDEA 插件开发入门教程
  • Java,console输出实时的转向GUI textbox
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java教程_软件开发基础
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SQLServer之创建显式事务
  • tweak 支持第三方库
  • 对超线程几个不同角度的解释
  • 构建二叉树进行数值数组的去重及优化
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端存储 - localStorage
  • 日剧·日综资源集合(建议收藏)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 设计模式 开闭原则
  • 通过几道题目学习二叉搜索树
  • 因为阿里,他们成了“杭漂”
  • 由插件封装引出的一丢丢思考
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 《天龙八部3D》Unity技术方案揭秘
  • 【云吞铺子】性能抖动剖析(二)
  • 仓管云——企业云erp功能有哪些?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​香农与信息论三大定律
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (39)STM32——FLASH闪存
  • (分布式缓存)Redis分片集群
  • (剑指Offer)面试题34:丑数
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (全注解开发)学习Spring-MVC的第三天
  • (译) 函数式 JS #1:简介
  • (转)使用VMware vSphere标准交换机设置网络连接
  • **PHP分步表单提交思路(分页表单提交)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET大文件上传知识整理
  • .NET中使用Protobuffer 实现序列化和反序列化
  • /etc/fstab和/etc/mtab的区别
  • []sim300 GPRS数据收发程序