redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis

2023-05-16

一、redis的配置文件redis.conf
1.redis配置文件中关于网络的配置
(1)port:指定redis服务所使用的端口,默认使用6379.
(2)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
(3)tcp-keepalive:连接保活策略。

2.redis中的数据库
redis中默认有16个数据库(database),编号为0~15,redis也是一个应用对应一个数据库,与mysql数据库不同的是,redis的数据库由它自身创建,程序员不能手动创建。
如果想要改变redis中数据库的数量可以通过修改redis的配置文件redis.conf的databases的值来改变。

3.安全配置
客户端连接mysql数据库需要用户名和密码,而客户端连接redis数据库不需要用户名和密码,只要知道ip和端口就可以连,所以redis的安全性不如mysql。
redis也可以在服务端设置密码(默认不适用),通过配置文件来设置密码,修改requirepass值。此项需要在protected-mode=yes时起作用,使用密码登录客户端:
redis-cli -h ip -p port -a pwd
一旦设置了密码验证,客户端连接redis服务时,必须使用密码连接。

二、redis的持久化
redis是一种内存数据库,大多数时候它把数据存储在内存中(redis主要作缓存)。除此之外,redis支持持久化(包括RDB和AOF),可以将内存中的数据保存在磁盘中,重启时候可以再次加载进行使用。注意:采用持久化会影响redis的高效性。
1.RDB(Redis Database)策略
在指定的时间间隔内,执行指定次数的写操作(在适当的时机采用适当手段把内存中的数据持久化到磁盘中),会自动触发一次持久化操作。在指定目录下生成一个dump.rdb文件,redis重启时通过加载dump.rdb文件来恢复数据。默认的策略是:
1分钟内改变了1万次;或者5分钟内改变了10次;或者
如果修改RDB策略需修改配置文件中的save的值:
在这里插入图片描述
save < seconds > < changes >:即redis在seconds秒内key改变changes次,redis把快照内的数据保存到磁盘中一次。
禁用RDB策略则直接将配置文件中所有的save都注释掉。
配置文件中的其他值:
dbfilename:redis持久化数据生成的文件名,默认是dump.rdb,也可以通过该值来修改。
dir:持久化数据生成文件保存的目录,默认是./即redis的启动目录,也可以自己配置。

2.AOF策略(对RDB策略的弥补,默认是开启RDB,默认不开启AOF,使用RDB可能进行了写操作但是三个策略一个也没有触发)
采用操作日志来记录进行的每一次写操作(记录的是命令不是数据)。每次redis服务启动时,都会重新执行一遍操作日志中的指令。可行性高但是效率很低。
也是通过修改配置文件来设置该策略。
在这里插入图片描述

三、redis的事务
1.概念
不论是关系型数据库还是非关系型数据库,都有事务的概念。
事务:把一组数据库命令放在一起执行,保证操作的原子性,要么同时成功,要么同时失败。
redis事务:允许把一组redis命令放在一起执行,把命令进行序列化(把命令排个序依次执行),然后一起执行,执行过程中不能保证原子性,只能保证部分原子性(后面解释)。

2.redis事务的基本操作
(1)multi:用来标记一个事务的开始。
(2)exec:用来执行事务队列中所有的命令。
在这里插入图片描述
部分原子性的说明:
(a)错误1
如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事务的原子性。
例如:
在这里插入图片描述
在这里插入图片描述
(b)错误2
如果一组命令在压入队列中正常,但在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其它命令的执行,不能保证事务的原子性。
例如:
在这里插入图片描述
在这里插入图片描述
(3)discard:清除所有已经压入事务队列中的命令,事务也自动会结束。
例如:
在这里插入图片描述
在这里插入图片描述
(4)watch: 监控某一个键,当事务在执行过程中,此键代码的值发生变化时,则本事务放弃执行;否则,正常执行。例如:

watch version
multi 
decrby balance 50
incrby balance2 50
incr version
exec

监控version字符串,只有version值未变事务才能正常执行。
说明:version字段主要用于解决并发执行的情况。
(5)unwatch:放弃监控所有的键

watch version
unwatch
multi 
decrby balance 50
incrby balance2 50
exec

四、redis消息的发布与订阅(了解原理即可)
redis客户端订阅频道(频道可以理解为对于某些数据的关注,比如对于某个数据的修改的情况为一个频道,所有想要关注该数据修改情况的客户端订阅该频道,当该数据被修改时将消息发送到订阅了该频道的客户),消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到该消息。
(1)subscribe:订阅一个或者多个频道的信息

subscribe ch1 ch2 ch3

(2)publish:将消息发布到指定频道

publish ch1 hello

(3)psubscribe:订阅一个或者多个频道,它的功能更强大,频道名支持通配符。

五、搭建redis集群
集群就是将多个服务器搭建成一个集体,多个服务器的数据相同,当有多个请求时,多个服务器可以分配处理请求(哪个服务器空闲着将请求分配给它处理),减轻只有一台服务器时服务器处理请求的压力。集群适用于处理“写少读多”的情况。
1.redis的主从复制
主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。
主从复制:主写从读,主多从少、读写分离、主写同步复制到从。
2.例如:搭建一主二从的redis集群
(1)搭建3台redis服务
按理需要在三台计算机中分别安装redis软件(服务器),但也可以在用1台redis模拟3台redis服务(假设分别为6379、6380、6381),方法是准备3份redis配置文件,分别将3份配置文件中的bind、pidfile、端口号、dbfilename(持久化文件)和logfile(日志文件)改为不同的值。分别使用3个redis配置文件启动3个redis服务,启动时指定对应的配置文件。
(2)通过3个redis客户端分别连接3台redis服务
(3)查看3台服务在集群中的主从角色

info replication

目前3个redis服务是3个互不关联的主机,都能写和读,都没有从机。
(4)设置主从关系
在6380和6381上执行:slaveof 127.0.0.1(主机ip地址) 6379(主机redis服务的端口),则6379是主机、6380和6381是从机。
(5)全量复制
一旦主从关系确定,会自动把主机中已有的数据会自动同步复制到从机上。
(6)增量复制
主机上修改数据,会自动同步复制到从机上。
(7)读写分离,主写从读
在从机上写数据会报错,从机只能读数据。
(8)主机宕机(主机宕机,默认从机原地待命,主机恢复后一切恢复正常)
关闭6379服务,可以发现6380和6381还是从机,但是连接状态(master-link-status)变成了down(也是通过info replication查看)。重启加粗样式6379服务,可以发现6379还是主机,有两个从机。
(9)从机宕机(从机恢复,需要重新设置主从关系)
关闭6380服务,发现6379还是主机,但是只有一个从机;6381还是从机,主机是6379(即6381不受影响)。重启6380服务,发现6380变成了独立的主机,6379与6381的状态与6380宕机时的状态一样。若要6380作为6379的从机则要重新设置主从关系。
(10)主机宕机,从机上位
关闭6379服务,找到一个性能较好的从机让其上位(变为主机)。
上位步骤:
断开原来主从关系,slaveof no one;
重新设置主从关系,让其它从机转换主机,执行slaveof命令重新设置。
这时再重启6379会发现它是一个没有从机的独立的主机。

六、redis的哨兵模式
哨兵是redis的一段代码,提供一套模式,自动实现“主机宕机、从机上位”。

七、Jedis
使用redis官方推荐的Jedis,在java应用中操作redis。Jedis几乎涵盖了redis的所有命令。操作redis的命令在Jedis中以方法的形式出现。
1.新建一个空项目,编码格式改为utf-8

在这里插入图片描述
2.新建一个module,选择maven的web项目
在这里插入图片描述
3.添加jedis依赖
在这里插入图片描述
4.新建一个java文件夹(directory),make directory as -->sources root
新建jedis包(package),再新建测试类Test。
5.打开redis服务。
6.编写代码,运行。
在这里插入图片描述
jedis.ping()相当于在redis客户端执行ping命令,返回值为“PONG"表示服务端正常运行。
jedis.auth()是在设置了redis连接密码时使用的,可以通过查看配置文件的requirepass值。
在这里插入图片描述
在这里插入图片描述
上述代码相当于”exists k1"命令。
在这里插入图片描述
代码:

public class Test {
    public static void main(String[] args)
    {
        //连接redis,使用Jedis对象,new时传递两个参数,一个为ip地址,一个为port(端口号)
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.auth("123456");

        /*使用jedis对象来操作redis服务
        String ret = jedis.ping();
        System.out.println(ret);*/

        /*获取服务端中所有的字符串,相当于”keys *“命令
       Set<String>  keys = jedis.keys("*");
       for(String key :keys){
           System.out.println(key);}*/

        /* 相当于"exists k1"命令
        Boolean ret = jedis.exists("k1");
        System.out.println(ret);*/


        //相当于“set k3 3"命令
        jedis.set("k3","3");
        Set<String>  keys = jedis.keys("*");
        for(String key :keys){
            System.out.println(key);}


    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis 的相关文章

随机推荐

  • 单片机学习总结

    51单片机的学习总结 经过一个学期的51单片机的学习 xff0c 对于51单片机有了很大的理解 由于我学的是汇编语言 xff0c 实验也是用的汇编语言 首先对于51单片机要了解他的内部结构 一个8位的CPU xff0c 一个片内振荡器及时钟
  • 【计算机三级网络技术】 快速求出IP地址块经聚合后的IP地址

    计算机三级 网络技术之快速求出IP地址块经聚合后的IP地址 相信大家在备考计算机三级网络技术都会遇到求多个IP地址聚合后的地址是什么的题目 xff0c 以下是一个小技巧 xff08 具体原理自己把十进制的IP地址和子网掩码换算成二进制理解一
  • Ubuntu虚拟机使用NAT连接 然后无法上网的情况

    问题描述 xff1a 以下为我的虚拟机的网络适配器配置 xff0c 使用的是NAT模式 正常连接上网络的时候虚拟机右上角会如下图所示 当网络down了以后 xff0c 就不会显示第一个 xff0c 那么这个时候就可以使用以下方法来解决 仅作
  • 【计算机网路】(3)网络层:IP地址组成、分类,子网划分

    目录 IP地址 xff08 32位 xff09 1 1 组成 1 2 分类 1 2 1 A B C三类IP地址的组成 1 2 2 私有地址 记 1 3 子网掩码 1 3 1 示例 求IP地址为192 168 1 0的网络号 1 4 DHCP
  • 【知识图谱】知识图谱入门详细介绍

    知识图谱 入门与介绍 文章目录 知识图谱 入门与介绍1 引言2 概念3 分类4 发展历程5 作用5 1 搜索5 2 问答5 3 辅助大数据分析 6 知识图谱的构建6 1 数据获取6 2 信息 xff08 知识 xff09 抽取6 3 知识融
  • vnc服务器配置—linux

    VNC服务器配置 vnc服务器是个远程控制服务器 需求 xff1a 在linux中装服务器端 xff0c 在windows中装客户端 xff0c 使得可以远程控制linux 首先下载vnc服务器 yum install tigervnc s
  • 18715 出栈序列

    18715 出栈序列 时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 不限定 Description 一种简洁的栈定义方法如下 int st 1000 top 61 0 以top作为栈顶指针
  • Ubuntu 打不开终端

    因为我在做python时做了应该是删除了软连接 xff0c 然后终端就打不开了 在网上寻找多个方法 xff0c 终于找到适合自己的 请注意 xff0c 这里可能会出现其他问题 xff0c 使用时请注意 因为进不去终端 xff0c 所以按ct
  • unity实现切割图片

    我们在找资源时有时候会遇到把一堆图片放进一张图片的情况 xff0c 往往需要将一块块小图片切割出来使用 xff1a 步骤 xff1a xff08 1 xff09 将Sprite Mode设置为Multiple 2 xff09 点击Sprit
  • 使用mybatis实现数据库插入数据

    xff08 1 xff09 在Dao层的实体类接口中添加相应函数 xff08 2 xff09 在相应的 xml文件中加入一个mapper标记 xff08 3 xff09 修改main 函数中的语句 xff0c 关键是修改了sqlId 修改指
  • 计算机图形学(三维观察投影线、视图变换、投影变换)

    一 三维观察流水线 概念 xff1a 将建立的三维场景显示在二维视口的过程称为三维观察流水线 在三维观察流水线中 xff0c 也就是在将三维场景显示在二维视口的过程中 xff0c 需要在不同坐标系下进行不同的操作 xff0c 这些坐标系包括
  • javascript:html嵌入javascript代码的三种方式

    一 概念 javascript是运行在浏览器中的脚本语言 xff0c 运行在浏览器的内存当中 xff0c 不需要程序员手动编译 xff0c 编写玩源代码之后 xff0c 浏览器直接打开解释执行 xff0c 简称JS 二 html嵌入java
  • idea中新建和写一个简单的vue项目

    一 使用ida创建一个vue项目 xff08 默认node js环境已配好 xff0c idea已加vue js插件 xff09 xff08 1 xff09 新建项目 xff08 2 xff09 观察项目目录结构 node modules文
  • css的相对定位和绝对定位

    css标签的相对定位和绝对定位是通过position属性来控制的 xff0c 相对定位和绝对定位不改变元素的大小形状 xff0c 只改变元素的位置 一 position属性的值有以下几种 xff1a static 默认值 xff0c 没有定
  • 个人博客系统(Vue实现)的主页布局设计

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 整体布局 上下划分 xff0c 再左右划分 主体代码 xff1a lt el container
  • 绘制Vue主页的列表结构(包括增、删、改、查功能)

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 面包屑导航区域设计 xff08 下面划红线的部分 xff09 说明 xff1a el bread
  • pytorch入门10--循环神经网络(RNN)

    补充 xff1a torch randn 函数返回一个张量 xff0c 包含了从正态分布 xff08 均值为0 xff0c 方差为1 xff09 中抽取的一组随机数 张量的形状由参数决定 xff0c 参数个数任意 例如 xff1a torc
  • amixer用法

    1 先看看amixer支持哪些命令 大概有哪些功能 amixer help Usage amixer lt options gt command Available options h help this help c card N sel
  • 常见的UNIX/LINUX命令

    一 文件目录类命令 命令格式 xff1a lt 命令名称 gt 选 项 参数1 参数2 例如 xff1a ls la etc 1 浏览目录命令 xff08 1 xff09 ls list 功能 xff1a 显示目录文件 语法 xff1a l
  • redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis

    一 redis的配置文件redis conf 1 redis配置文件中关于网络的配置 1 port 指定redis服务所使用的端口 xff0c 默认使用6379 2 bind 配置客户端连接redis服务时 xff0c 所能使用的ip地址