1.Redis简介
Redis是比较热门的NOSQL系统之一,它是一个key-value存储系统。
2. 使用Redis有哪些好处?
- 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
- 支持丰富数据类型,支持string,list,set,sorted set,hash
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
3. redis相比memcached有哪些优势?
- memcached所有的值均是简单的字符串,redis支持更为丰富的数据类型
- redis的速度比memcached快很多,因为redis是单进程单线程的,redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销
- redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失
4.Linux下Redis的安装和部署
(参考)http://www.jb51.net/article/79096.htm
5.redis集群搭建
(参考)http://www.jb51.net/article/122971.htm
6.搭建Sentinel(哨兵)分布式系统
(参考)https://blog.csdn.net/shouhuzhezhishen/article/details/69221517
哨兵模式的功能列表:
- 监控:哨兵不断的检查master和slave是否正常的运行。
- 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
- 自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。
- 配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告新地址。
场景测试:
- master宕机:会选取一个master 1的slave作为新的master
- master恢复:原来的master自动切换成slave,不会自动恢复成master
- 任意一个Slave宕机:查看Master的Replication信息:已删除此slave
- Savle重启:sentinel能快速的发现slave加入到集群中。
7.主从同步原理
(参考)https://www.cnblogs.com/hepingqingfeng/p/7263782.html
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。
8.做消息队列
(参考)https://blog.csdn.net/jacman/article/details/51246449
发布者和订阅者模式:发布者发送消息到队列,每个订阅者都能收到一样的消息。
生产者和消费者模式:生产者将消息放入队列,多个消费者共同监听,谁先抢到资源,谁就从队列中取走消息去处理。注意,每个消息只能最多被一个消费者接收。
9.jedis操作redis
(参考)https://blog.csdn.net/qq_32347977/article/category/6060131
//设置过期时间 ,时间单位是秒
jedis.expire("name", 10);
jedis.setex("name",10,"张三");
//查看key的有效时间,返回有效时间单位是秒
System.out.println(jedis.ttl("name")); //10