视频链接:https://www.bilibili.com/video/BV1Uz4y1X72A
视频选集:P34
默认的策略:
根据数据的特点决定开启哪种持久化策略;一般情况,开启RDB足够了
事务:把一组数据库命令放在一起执行,保证操作原子性,要么同时成功,要么同时失败。
Redis的事务:允许把一组redis命令放在一起,把命令进行序列化,然后一起批行,保证部分原子性
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
作用:清除所有已经压入队列中的命令,并且结束整个事务
watch 作用:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则,正常执行
unwatch 作用:放弃监控所有的键
1、单独的隔离操作:事务中的所有命令都会序列化、顺序地执行。事务在执行过程中,不会被其它客户端发来的命令请求所打断,除非使用watch命令监控某些键
2、不保证事务的原子性: redis同一个事务中如果一条命令执行失败,其后的命令仍然可能会被执行,redis的事务没有回滚。Redis 已经在系统内部进行功能简化,这样可以确保更快的运行速度,因为Redis 不需要事务回滚的能力。
客户端到客户端的通信:redis客户端订阅频道,消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到消息。
subscribe 作用:订阅一个或者多个频道的消息
publish 作用:将消息发布到指定频道
psubscribe 作用:订阅一个或者多个频道的消息,频道名支持通配符
主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主
主少从多、主写从读、读写分离、主写同步复制到从。
使用一个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 &
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
info replication
默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机

先在6379进行写操作:set k1 v1
三台redis服务互相独立,互不影响
设从不设主
在6380上执行:slaveof 127.0.0.1 6379

在6381上执行:slaveof 127.0.0.1 6379

全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库。
在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中的步骤
在redis安装目录下创建配置文件:redis_sentinel.conf
写下内容:sentinel monitor dc-redis 127.0.0.1 6379 1
表示:指定监控主机的 ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。
redis-sentinel + 配置文件名字
注:在这里为redis-sentinel redis_sentinel.conf

关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
哨兵程序自动选择从机上位
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
使用Redis,官方推荐的Jedis,在java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以方法的形式出现。
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) ;
}
}
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) ;
}
}
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();
}
}
redis-desktop-manager