一、概述
1、Redis基于内存的非关系型数据库
2、存储形式
(1)默认数据库一共16个,编号idex 0-15
(2)数据存储:key,value
(3)创建存储数据时,可以设置数据的生命周期---类似局部变量
3、关系型数据库可非关系型数据库
关系型:基于表,Oracle、mysql、DB2、sqlserver...
非关系型:采用聚合数据结构存储数据,redis、mongoDB、HBase...
二、5中存储结构
1、java
字符串、list列表、set集合、pojo(对象)
2、redis中对应存储数据的数据结构
(1)字符串类型:string
(2)列表类型:list----有序,按存储顺序
(3)集合类型:set----无序
(4)有序集合类型:zset---有序,按某个字段的排序
(5)哈希类型:hash---存对象
三、相关命令
(一)数据库相关
(二)key相关
(三)数据操作相关
待更...
四、事务
1、事务
把一组数据库操作放一起执行,保证操作的原子性,要么通过成功,要么同时失败
redis事务:允许把一组redis命令一起执行,将命令进行序列化,压入命令队列,再按照顺序依次一起执行---保证部分原子性
2、redis事务特点
(1)一组命令在压入事务队列过程中发生错误---其他所有命令都不执行----可以保证事务的原子性
(2)压入队列过程中没有错误,执行事务队列中发生错误----只影响本身的命令,不影响其他命令的执行----不能保证事务的原子性
3、实现事务的命令
- 标记事务的开始---multi---开启事务
- 执行事务队列中的命令---exec---开始执行事务
- 清除所有已经压入事务队列的命令,并结束整个事务--discard
- 监控版本号,判断数据是否被别人改了---watch
version---版本号---判断是否有别人修改---乐观锁字段
- 放弃监控所 有键--unwatch---满足一定条件不监控
五、主从复制
1、主从复制----搭建集群
同样的数据复制到多个redis中
主少从多
2、读写分离----专门的服务器复制写,专门的服务器
(1)主机---可写可读 主要负责写
(2)从机---只读 只负责读 不可以写
主库写完同步到从库
3、宕机
(1)主机宕机,从机原地待命
特点:从机原来的数据还可读,但不会由主机新增数据
当主机宕机从机的状态----info replication
依旧是从机,但连接状态是down
(2)从机宕机
主机少一个从机,其他从机不变
从机恢复---需要重新设置主从关系,否则改机作为独立主机运行
(3)从机上位
当主机宕机之后,从机上位
之前的主机恢复
情况1:恢复原主机
情况2:将原主机变成从机的从机
六、哨兵模式--解决宕机问题
1、 作用:监控主机,自动设置从机上位
2、哨兵模式的搭建
(1)搭建一个集群架构(一主二从,主从复制)
(2)在主从集群架构中创建哨兵模式配置文件----sentinel.conf
(3) 启动哨兵模式--redis-sentinel redis_sentinel.conf
3、工作机制
当主机宕机之后,哨兵模式会自动启动投票算法在各个从机中投票(基于性能)
哪个从机最先到达设置的票数,就升级为主机
当原主机恢复后,哨兵模式使其自动从属于新的主机
七、分布式锁
1、基于数据库--表锁(读写锁)、行锁
2、基于缓存--redis--Redisson框架,封装了Redlock算法,实现分布式锁
3、基于zookeeper
可以直接使用zookeeper第三方库Curator客户端,这个客户端中封装了一个可重入的锁服务。
Curator提供的InterProcessMutex是分布式锁的实现。acquire方法用户获取锁,release方法用于释放锁。
此部分参考:集群环境下Redis分布式锁 - 树上的疯子 - 博客园
基于数据库实现的分布式锁_朱小厮的博客-CSDN博客_数据库实现分布式锁
八、消息的发布与订阅
1、客户端之间的通信----修改数据之后在频道上发布,订阅了该频道的客户端可以接收到消息
2、消息的订阅和发布(了解)
(1)subscribe----订阅一个或多个频道
(2)public---将消息发送到指定频道上
3、其他专门消息通信的通道----activeMQ
九、Jdedis工具包
1、redis的第三方连接工具----redis desktop mananger 类mysql
2、spring整合redis的两种方式
(1)Jedis
(2)SpringDataRedis----更常用
Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache
此部分参考:Spring集成Redis的两种方式Jedis和RedisTemplate_kagurawill的博客-CSDN博客