阐明:应用缓存能够无效的升高用户拜访物理设施的频次.疾速从内存中获取数据,之后返回给用户,同时须要保障内存中的数据就是数据库数据.
思考:
1.缓存的运行环境应该在内存中.(快)
2.应用C语言开发缓存
3.缓存应该应用什么样的数据结构呢--------K-V构造 个别采纳String类型居多 key必须惟一 . v:JSON格局
4.内存环境断电即擦除,所以应该将内存数据长久化(执行写盘操作)
5.如果没有保护内存的大小,则容易导致 内存数据溢出. 采纳LRU算法优化!!!

redis介绍

redis是一个key-value存储系统。和Memcached相似,它反对存储的value类型绝对更多,包含string(字符串)、list(链表)、set(汇合)、zset(sorted set --有序汇合)和hash(哈希类型)。这些数据类型都反对push/pop、add/remove及取交加并集和差集及更丰盛的操作,而且这些操作都是原子性的。在此基础上,redis反对各种不同形式的排序。与memcached一样,为了保障效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把批改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
原子性阐明: Redis的操作是单过程单线程操作,所以没有线程并发性的平安问题. 采纳队列的形式一个一个操作.

用法

缓存
数据库
消息中间件(因为反对链表构造,所以能够

装置redis

只须要在redis根目录下顺次执行make和make install命令即可

配置

正文ip绑定 #bind 127.0.0.1
敞开保护模式 protected-mode no
开启后盾启动 daemonize yes

命令

1.启动命令: redis-server redis.conf
2.检索命令: ps -ef | grep redis
3.进入客户端: redis-cli -p 6379
4.敞开redis: kill -9 PID号 | redis-cli -p 6379 shutdown

根本办法

jedis.setex("key",time,"val"):向redis插入规定超时工夫的数据
jedis.setnx("key","val"):jedis里存在key则不变,不存在则批改
jedis.set("key","val",new setParam().ex(time).nx
jedis.multi():开启事务
jedis.exec():提交事务
jedis.discard():回滚事务

分布式锁机制

同步锁只能解决tomcat外部问题,不能解决多态tomcat并发问题.
思维:
1.锁应该应用第三方操作 ,锁应该专用.
2.准则:如果锁被人正在应用时,其余的用户不能操作.
3.策略: 用户向redis中保留一个key,如果redis中有key示意有人正在应用这把锁 其余用户不容许操作.如果redis中没有key ,则示意我能够应用这把锁.
4.危险: 如何解决死锁问题. 设定超时工夫.

aop

可通过aop来管制哪些办法应用缓存

Redis长久化策略

RDB
特点:
1.RDB模式是redis的默认的长久化策略.
2.RDB模式记录的是Redis 内存数据的快照. 最新的快照会笼罩之前的内容 所有RDB长久化文件占用空间更小 长久化的效率更高.
3.RDB模式因为是定期长久化 所以可能导致数据的失落.

命令:

  1. save 要求立刻马上长久化 同步的操作 其余的redis操作会陷入阻塞的状态.
  2. bgsave 开启后盾运行 异步的操作 因为是异步操作,所以无奈保障rdb文件肯定是最新的须要期待.

AOF
特点:
1.AOF模式默认条件下是敞开的,须要用户手动的开启

  1. AOF模式是异步的操作 记录的是用户的操作的过程 能够避免用户的数据失落
  2. 因为AOF模式记录的是程序的运行状态 所以长久化文件绝对较大,复原数据的工夫长.须要人为的优化长久化文件

Redis内存优化策略

1.LRU 最近起码应用.最罕用最好的算法
2.LFU 最不常常应用.
3.Random 随机算法
4.TTL 把设定了超时工夫的数据将要移除的提前删除的算法.

Redis分片机制

当海量数据存在redis中时,会重大影响咱们的查问效率,所以引入了redis分片机制,实现扩容.
springboot实现reids分片

一致性hash算法

平衡性平衡性是指hash的后果应该平均分配到各个节点,这样从算法上解决了负载平衡问题.因为会呈现节点地位不均的状况,所以引入了虚构节点的概念,来尽可能的达到均分.
枯燥性集群在删除或新增节点时,不会影响零碎的运行.
分散性数据应该扩散的放在集群中的各个节点.

Redis哨兵机制

Redis分片实现了内容扩容,但只有有一台宕机就会导致整个服务出问题,所以引入了Redis哨兵机制,相当于Redis的代理,实现高可用性.
哨兵机制先得实现Redis之间得主从挂载.
命令:slaveof ip 端口
查看主从状态:info replication
原理阐明:
1.配置redis主从的构造.
2.哨兵服务启动时,会监控以后的主机. 同时获取主机的详情信息(主从的构造)
3.当哨兵利用心跳检测机制(PING-PONG) 间断3次都没有收到主机的反馈信息则判定主机宕机.
4.当哨兵发现主机宕机之后,则开启选举机制,在以后的从机中筛选一台Redis当做主机.
5.将其余的redis节点设置为新主机的从.

springboot实现哨兵机制

Redis集群

因为redis分片机制只实现扩容,不反对高可用,而redis哨兵只能实现高可用.所以引出了redis集群机制

选举机制 脑裂景象

当集群选举时,间断三次呈现平票后果则可能呈现脑裂景象.
预防:只能通过多设主节点来预防脑裂.

springboot整合redis集群