一、Redis的配置文件
1.1 redis.conf存放位置
- Redis的安装根目录下(/opt/redis-5.0.2),Redis在启动时会加载这个配置文件,在运行时按照配置进行工作。
- 这个文件有时候我们会拿出来,单独存放在某一个位置,启动的时候必须明确指定使用哪个配置文件,此文件才会生效。
1.2 Redis 的网络相关配置
- 1、
bind
:配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上任何一个ip都可以;一般情况下都会配置一个ip。 - 2、
port
:配置Redis占用的端口,默认是6379。 - 3、
tcp-keepalive
:TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。
1.3 Redis的常规配置
- 1、
loglevel
:日志级别,开发阶段可以设置成debug,生产阶段通常设置为notice或者warning. - 2、
logfile
:指定日志文件名,默认情况下,Redis输出到控制台。可以进行该配置。使得redis把日志信息输出到指定文件中 - 3、
databases
:配置Redis数据库的个数,默认是16个。
例如:
搜索:直接写冒号加文件名称
日志级别和修改日志输出文件可以进行修改
1.4 Redis的安全配置
requirepass
:配置Redis的访问密码。默认不配置密码(保持高效),即访问不需要密码验证。- 此配置项需要在protected-mode=yes时起作用。开发多为no
- 使用密码登录客户端:redis-cli -h ip -p 6379 -a pwd
- 与上面配置一样,用冒号去找,然后改掉配置
1.5 Redis的RDB配置(默认持久化策略)
save <seconds> <changes>
:配置复合的快照触发条件,即Redis 在seconds秒内key改变changes次,Redis把快照内的数据保存到磁盘中一次。- 默认的策略是:
- 1分钟内改变了1万次
- 5分钟内改变了10次
- 15分钟内改变了1次
dbfilename
:Redis持久化数据生成的文件名,默认是dump.rdb,也可以自己配置。(持久化要写入的文件)dir
:Redis持久化数据生成文件保存的目录,默认是./即redis的启动目录,也可以自己配置。- 同样通过vim redis.conf,找到这个配置,修改自己想要的秒数和次数
1.6 Redis AOF配置(默认不开启)
appendonly
:配置是否开启AOF,yes表示开启,no表示关闭。默认是no。appendfilename
:AOF保存文件名appendfsync
:AOF异步持久化策略- always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差但数据完整性比较好(慢,安全)
- everysec:出厂默认推荐,每秒异步记录一次(默认值)
- no:不即时同步,由操作系统决定何时同步。
标题
二、Redis的持久化(了解)
2.1 理解Redis持久化
-
redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题。
-
当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失。为了解决这个问题,redis提供了持久化功能——RDB和AOF(Append Only File)。
2.2 RDB策略
- RDB(Redis DataBase)是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。
- 在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump.rdb文件来恢复数据。
- Redis默认开启RDB持久化方式,适合大规模的数据恢复但它的数据一致性和完整性较差。
2.3 AOF策略
- AOF(Append Only File),Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性)。
- 它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
- Redis 需要手动开启AOF持久化方式,AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
2.4 RDB和AOF
- 若只打算用Redis 做缓存,可以关闭持久化。
- 若打算使用Redis 的持久化,建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。
- AOF与RDB模式可以同时启用,这并不冲突。如果AOF是可用的,那Redis启动时将自动加载AOF,这个文件能够提供更好的持久性保障。
三、Redis的事务
3.1 Redis的事务
- Redis的事务允许在一次单独的步骤中执行一组命令,并且能够保证将一个事务中的所有命令序列化,然后按顺序执行;
- 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。即Redis的事务要能够保证序列化和原子性。
- Redis事务保证部分原子性,一般错误执行一组命令,重要错误保持完整原子性
3.2 Redis事务的常用命令——multi
- 语法:
multi
- 功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。
返回值:开启成功返回OK
3.3 Redis事务的常用命令——exec
-
语法:
exec
-
功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
-
多种情况
- 如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;(保持原子性)
- 如果在压队列的过程中正常,在执行队列中某一个命令报错,则只会影响本条命令的执行结果,其它命令正常运行;(部分原子性)
- 当使用WATCH命令时,只有当受监控的键没有被修改时,EXEC命令才会执行事务中的命令;而一旦执行了exec命令,之前加的所有watch监控全部取消。
-
返回值:这个命令的返回值是一个数组,其中的每个元素分别是原子化事务中的每个命令的返回值。 当使用WATCH命令时,如果事务执行中止,那么EXEC命令就会返回一个Null值。
3.4 Redis事务的常用命令——discard
- 语法:
discard
- 功能:清除所有先前在一个事务中放入队列的命令,并且结束事务。 如果使用了WATCH命令,那么DISCARD命令就会将当前连接监控的所有键取消监控。
- 返回值:清除成功,返回OK。
3.5 Redis事务的常用命令——watch
- 语法:
watch key [key …]
- 功能:当 **某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的 **如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。
- 返回值:监控成功,返回OK。
3.6 Redis事务的常用命令—— unwatch
- 语法:
unwatch
- 功能:清除所有先前为一个事务监控的键
如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。 - 返回值:清除成功,返回OK。
3.7 注意事项
- 单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键。
- 不保证事务的原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis不需要事务回滚的能力。
四、 Redis消息的发布与订阅(了解)
4.1 订阅与发布概念
- Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。
- 客户端订阅频道,消息的发布者往频道上发布消息,所有订阅此频道的客户端都能接受到消息。
4.2 发布订阅的常用命令——subscribe
- 语法:
subscribe channel [channel…]
- 功能:订阅一个或多个频道的信息
- 返回值:订阅的消息
4.2 发布订阅的常用命令——publish
- 语法:
publish chanel message
- 功能:将信息发送到指定的频道
- 返回值:数字。接收到消息订阅者的数量。
4.4 发布订阅的常用命令——psubscribe
- 语法:
psubscribe pattern [pattern]
- 功能:订阅一个或多个符合给定模式的频道。模式以* 作为通配符,例如:news. * 匹配所有以 news. 开头的频道。
- 返回值:订阅的信息。
五、Redis的主从复制
5.1 主从复制
- 主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。
- 主少从多,主写从读,读写分离,主写完可以自动同步到从。能解决并发访问。提高处理效果。
5.2 一主二从搭建
-
工作中,一个Redis装一台服务中,这里用一台服务器模拟三台主机。
-
第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
-
第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名,分别改成自己的
-
port 6379
-
pidfile /var/run/redis_6379.pid
-
logfile "6379.log"
dbfilename dump6379.rdb
-
第三步:分别打开三个窗口模拟三台服务器,开启redis服务。
-
-
第四步:连接并查看三台redis服务在集群中的主从角色,使用
info replication
命令
注意这三台主机互相独立,其中加入一个数据,那么另外两个数据并不能进行查询得到。 -
第五步:设置主从关系在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379
设从不设主
-
第六步:在主机6379中使用set k1 v1,那么在6380中使用get k1,也能看到
- 全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库
- 增量复制:主库写数据会自动同步到从库。在6379执行:set k2 v2;在6380和6381上执行keys *
-
第七步:主写从读、读写分离:在6380和6381上执行写操作set k3 v3(报错)
- 读写分离:主库上既能读也能写,但是从库里面只能读不能写,会报错
- 读写分离:主库上既能读也能写,但是从库里面只能读不能写,会报错
5.3 非正常情况——主机宕机(损坏)
-
关闭6379redis服务即关掉主机:
redis-cli -h 127.0.0.1 -p 6379 shutdown
、
-
从机查看redis服务信息
-
如果主机宕机,那么从机原地待命。仍然可以读取数据,但是不能进行数据更新
5.4 非正常情况——从机宕机(损坏)
- 关闭6379redis服务即关掉主机:
redis-cli -h 127.0.0.1 -p 6379 shutdown
- 如果从机宕机,那么主机少一个从机,其他从机不变
- 如果该从机恢复,需要重新设置主从关系
5.5 主机宕机,从机上位
- 从机断开原来的主从关系,执行命令
slaveof on one
- 再重新设置主从关系,把其他从机部署到该主机(原本为从机)
5.6 原主机恢复(天堂变地狱)
- 将原主机,接到某个从机如6381中
- 原主机变为从机,6381会有两个身份,即既是从机也是主机
- 但是只要有从的角色都不能进行写的操作
- 一台这个主机配置多台从机,一台从机又可以配置多台从机,形成庞大的集群,减轻一台主机压力,但是增加了服务间的延迟时间
5.7 哨兵模式概念
- 从机上位的自动版。Redis提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵通过发送命令,来监控主从服务器的运行状态。
- 如果检测到master故障了根据投票数自动将某一个slave转换master,
- 通过消息订阅模式通知其它slave,让它们切换主机。
- 然而,一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多哨兵进行监控。
5.8 搭建哨兵模式
-
第一步:根据上面操作,搭建一主而从的
-
第二步:查看默认哨兵文件
-
第三步:在redis安装目录下创建配置文件,文件名redis_sentinel.conf
-
第四步:
- 编写内容:
sentinel monitor mymaster 192.168.235.128 6379 2
- 含义:指定监控主机的ip地址,port端口,得票数多于2(此处为三个主机)时表示需要切换主从关系。
- 编写内容:
-
第五步:启动哨兵服务。命令:
redis-sentinel redis_sentinel.conf
六、Jedis操作Redis
6.1 Jedis简介
- 使用Redis官方推荐的Jedis,在java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以方法的形式出现。
6.2 导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.1</version><!--版本号可根据实际情况填写-->
</dependency>
6.3 书写测试
//连接Redis
Jedis jedis = new Jedis(192.168.195.135,6379);
//使用Jedis对象操作redis服务
String ret = jedis.ping();
//查询所有的key
Set<String> keys = jedis.keys(*);
//遍历返回的集合
for(String key: keys){
System.out.println(key);
}
//其他与Redis的命令几乎相同。
调用Jedis对象的方法即可,主要是对redis对数据操作的熟悉
关于key的操作命令,关于字符串数据类型的操作命令
关于List数据类型的操作命令,关于Set数据类型的操作命令,关于harsh类型的操作命令,关于有序集合的常用命令
七、可视化工具
redisdesktopmanager。可百度下载并使用。使用方式和MySQL使用Navicat道理是一样的