优势:速度快、类型丰富、丰富的特性、持久化存储,单线程。redis
(1)令牌生成(临时有效期)算法
(2)短信验证码(临时有效期)spring
(3)热点数据(使用redis减轻数据库的压力)数据库
(4)使用redis实现消息中间件,发布订阅功能(不推荐)数组
(这里多说一下消息中间件的做用: 应用解耦,异步处理,错峰与流控)缓存
(5)分布式锁(使用zk或者redis 实现分布式锁)springboot
(6)网站计数器(由于redis是单线程的,在高并发状况下,保证记录的惟一性)服务器
(7)此外还有redis解决雪崩效应,redis多种集群方案,reids持久化机制,reids哨兵机制网络
(1)String类型 字符串 数据结构
(2)List 列表 简单的字符串列表,采用的双向链表结构
(3)Hash 字典 在值比较少时使用数组,值比较多的时候转换成hashmap数据结构
(4)Set 集合 String类型的无序集合,值是惟一的
(5)Sorted Set 有序集合 值是惟一的,而且每一个成员都会关联一个分数,并经过该分数排序。
(1)为何不用定时删除策略
由于这样须要用一个定时任务来监测全部点key,虽然内存能及时释放,可是十分消耗资源。在大并发下cpu要将时间用来处理请求。
(2)按期删除+惰性删除
每隔100ms,随机抽查一些key是否是过时,而后剩下的在获取某个key的时候去校验是否过时。
(3)配置内存淘汰机制
在redis.conf中有一行配置
通常配置allkeys-lru 随机删除最近使用最少的key
默认 volatile-lru – >使用LRU算法,仅对设置了过时时间的键采起LRU
淘汰
(1)概述
redis持久化机制分为RDB和AOF两种,默认是快照RDB方式
(2)RDB持久化方式
redis.conf默认配置:
save 900 1 900秒内,超过一个key被修改,则保存
save 300 10 300秒内超过10个key被修改,则保存
保存后默认生成一个dump.rdb的文件。
(3)AOF方式
redis.conf 默认配置
appendonly no 默认为30秒一次
可修改成:
appendfsync always 每次修改都会保存
appendfsync everysec 每秒一次
appendfsync no 每30秒一次
默认保存文件为appendonly.aof
注:aof模式有个问题就是aof文件会变的很大。每每经过aof分析里面有太多冗余数据时,会进行重写,这个操做知足必定条件是,Redis会自动触发。通常生产环境通常要求 在达到几个g或者几十个g才会重写,由于重写会影响redis性能。
重写参数:
auto-aof-rewrite-percentage 100 重写增加比例,如上次重写是100,则在200时触发。
auto-aof-rewrite-min-size 64mb 最小触发重写的文件大小
(1)什么是主从复制
将服务器分为主服务器和从服务器,主服务器能够容许读写操做,从服务器只能有读操做。主服务器只能有一个。
(2)主从复制的应用场景
集群,读写分离,日志备份,高可用
(3)什么是读写分离
读和写分库链接,读一个库,写一个库,互不影响,增长总体吞吐量,读写分离须要解决两个库之间的数据同步问题,redis已解决
(4)主从复制原理图
(5)主从复制存在的问题
当数据同步延迟吃形成的主库和从库的不一致的问题。
①若是qq消息,论坛等容许短期内不一致的业务,就能够不做处理。
②强制读主,从库只用来主库挂掉事后的一个备份。
③不一样的业务,在进行表操做时用缓存记录下来,好比库:表:主键 并设置一个过时时间,过时时间为主从延时时间,若是读到了key说明还在同步,须要去读主库,若是没有 读到key则去读从库。具体读哪个由路由来完成。
在“从服务器”的redis.conf的 salveof 后面添加主服务器的ip地址+端口,若是主服务器配置了密码 须要加上masterauth
将redis-4.0.8.tar.gz包放在/usr/local下
①解压tar -zxvf redis-4.0.8.tar.gz
② cd redis-4.0.8
③运行make
报错:
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
解决:使用这个make MALLOC=libc 替换 make
④make install PREFIX=/usr/local/redis
⑤移动配置文件到安装目录下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
⑥配置redis为后台启动
vi /usr/local/redis/etc/redis.conf //将daemonize no 改为daemonize yes
vi /usr/local/redis/etc/redis.conf // requirepass 123
⑦开启redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
⑧链接Redis客户端
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"
PING 结果表示成功
⑨关闭防火墙
//临时关闭
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
⑩中止Redis服务
./redis-cli -h 127.0.0.1 -p 6379 -a "123456" shutdown
修改redis.conf
注释掉
#bind 127.0.0.1 开启外网访问
(1)做用:心跳检查,故障转移(选举策略),监控。
注:哨兵注意事项:哨兵通常不和其余redis服务器在一块儿,启动的时候先启动哨兵的状况下,最好先启动主的redis,否则哨兵会觉得主挂掉了,进行选举。
(2)配置
①配置拷贝到etc目录
cp sentinel.conf /usr/local/redis/etc
②修改sentinel.conf配置文件
sentinel monitor mymast 192.168.110.133 6379 1 #主节点 名称 IP 端口号 选举次数
一个Sentinel节选举成为Leader的最低票数为quorum(就是6379后面那个1)
和Sentinel节点 数/2+1
的最大值。
sentinel auth-pass mymaster 123456
③ 修改心跳检测 30毫秒
sentinel down-after-milliseconds mymaster 30
④sentinel parallel-syncs mymaster 2
sentinel parallel-syncs <master-name> <numslaves>
注:这个配置项指定了在发生failover主备切换时最多能够有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,可是若是这个数字越大, 就意味着越 多的slave由于replication而不可用。能够经过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
⑤启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
⑥中止哨兵模式
ps -ef | grep redis
⑦若须要springboot 集成哨兵模式则须要
把哨兵配置文件中的protected-mode no 的注释放开
搭建哨兵的时候要注意,全部服务器都须要配置密码
masterauth 123456
主服务器不用配置 slaveof
muti()开启
exec()提交
dicard() 回滚
一级(ehcache)+ 二级(redis) 目的是尽可能使用本地缓存:做用①若是本地没有再走网络。效率会更高。 ②减轻redis访问压力,提升访问速度。③若是redis挂了,直接穿透到 数据库容易形成雪崩效应。
注意事项:1.一级缓存的过时时间,必定要比二级缓存的过时时间要少能有效控制一二级缓存不一样步的问题。
2. 使用job定时任务去比较一二级缓存里面的值,或者使用二级缓存更新后发送到mq里面,而后在拿去更新一级缓存,这么作比较耗资源。
(代码若是须要的话,能够在下方评论)
流程图以下