Redis入门知识点

一、Redis概念
在项目中,如果只是搭建tomcat服务器的集群,对于数据库不做任何配置,则无法实现高并发的处理。引入缓存可以极大降低用户直接访问物理设备的访问频次,从内存中直接获取数据,并且数据库记录与缓存的记录是一致的.。Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)。
二、Redis持久化
redis运行环境在计算机的内存中,如果redis服务器意外宕机,或者机房意外断电等,那么内存中的数据将会全部清空,势必造成业务数据的丢失,为此可以将内存数据按照指定的规则保存到磁盘中,当redis重启时,根据配置文件中指定的持久化文件,实现数据的恢复。Redis的持久化方式有以下两种:RDB模式和AOF模式。
RDB模式:
1.RDB模式是redis中默认的持久化的策略
2.RDB模式记录的是Redis的内存快照 记录速度更快
3.RDB模式是定期持久化.可能会导致少量的数据丢失.
4.如果用户可以允许少量的数据丢失,则首选RDB模式.因为RDB模式工作的效率最高.
AOF模式:
1.AOF模式默认条件下是关闭的,需要手动开启.
2.AOF模式可以实现数据的实时持久化.
3.AOF模式,记录的是用户的操作的过程.以追加的形式添加到配置文件之后.
4.AOF模式的持久化是异步操作.不会影响用户的使用.用户使用不会陷入阻塞.
5.由于AOF模式记录的是用户的操作过程,所以持久化文件较大.恢复数据时间较长.
三、Redis内存策略
Redis将数据都保存到内存中,如果一直往内存中存储数据,而不维护.将来可能导致内存数据存不下.内存溢出.由此我们可以通过redis赋值时添加超时时间进行数据删除或者采用算法进行淘汰。下面介绍两种算法概念,LRU算法和LFU算法。
LRU算法:LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。
LFU算法:LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
redis内存优化策略有8种具体算法:
1.volatile-lru 设定了超时时间数据,之后采用LRU算法进行删除.
2.allkeys-lru 全部数据,采用LRU算法进行内存数据的优化.
3.volatile-lfu 设定了超时时间的数据,采用LFU算法进行删除
4. allkeys-lfu 所有的数据采用LFU算法实现数据删除.
5.volatile-random 为设定超时时间的数据采用随机算法.
6.allkeys-random 所有数据采用随机算法实现删除.
7.volatile-ttl 将所有设定了超时时间的数据,利用ttl方式进行排序,将还没有超时的数据提前删除.
8.noeviction (默认策略)不采用任何的算法删除数据.如果将来内存溢出则报错返回.
四、Redis分片机制
Redis分片主要目的实现内存数据的扩容.如果redis分片的节点如果有一个服务器宕机,则直接影响用户的使用.Redis分片机制没有实现高可用功能.(HA)。如下在地址为192.168.126.166的Linux主机上配置三台端口号为6379,6380,6381的Redis服务器并启动,Spring整合Redis分片入门案例如下:

@Test
        public void testShards() {
            List<JedisShardInfo> shards = new ArrayList<>();
            shards.add(new JedisShardInfo("192.168.126.166", 6379));
            shards.add(new JedisShardInfo("192.168.126.166", 6380));
            shards.add(new JedisShardInfo("192.168.126.166", 6381));
            ShardedJedis jedis = new ShardedJedis(shards);
            jedis.set("shards", "测试redis分片机制!");
            System.out.println(jedis.get("shards"));
        }

五、Redis哨兵机制
如果需要实现redis的高可用(HA),则必须先实现主从的同步.当用户操作主节点时,由程序内部自动的实现数据的同步,将数据同步给从节点.这时主机和从机拥有相同的数据.现准备三台Redis服务器,其中一台设置为主服务器(master),其余两台实现主从挂载,设置为从服务器(slave)。然后编辑哨兵(sentinel)配置文件sentinel.conf(关闭保护模式、开启后台启动、配置哨兵监控等)。哨兵的工作原理如下:
1.当哨兵启动时,会根据配置文件监听当前的主机.获取主机的全部信息.
2.哨兵利用心跳检测机制,判断当前主机是否存活.如果连续3次 PING-PONG检测时都没有响应.则断定当前主机宕机.
3.如果发现主机宕机,则哨兵会通过监听获取当前主机的从节点信息,之后利用选举规则,动态选择新的主机.
4.如果一旦确定新的主节点,则将其余的节点设置为新主机的从.
六、Redis集群搭建
分片实现内存扩容,哨兵实现高可用,分片如果有一个节点宕机,则整个redis分片不能正常运行,而哨兵本身也不能保证不出故障,集群则保证了分片的效果,并在服务器内部实现心跳检测。
Redis集群高可用推选原理:Redis的所有节点都会保存当前redis集群中的全部主从状态信息.并且每个节点都能够相互通信.当一个节点发生宕机现象.则集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis剩余的主节点进入选举机制.投票选举链接宕机的主节点的从机.实现故障迁移。
Redis的Hash槽存储数据原理:RedisCluster采用此分区,所有的键根据CRC16校验后对16384取模来映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值