1   Redis高级

1.1    Redis中持久化策略

1.1.1  Redis持久化规则

说明:根据redis的配置文件中所配置的持久化策略,定期持久化.将redis内存中的数据最终写入到持久化文件中.当redis意外关闭内存数据清空了.当redis重新启动时,根据配置文件中持久化文件的路径/名称,读取持久化文件.

从持久化文件中恢复内存数据.

1.2    RDB模式

说明:

  1. RDB模式是redis中默认的持久化策略.该模式能够定期(有时间间隔)将内存中的数据持久化到XXX.rdb文件中.
  2. 该模式的效率是最高的.相当于对内存做快照处理.
  3. 同时数据加密保存.
  4. 如果允许少量的数据丢失则首选RDB模式
  5. 持久化时间间隔

1.2.1  RDB模式持久化配置

save 900 1            900秒内执行一次set操作 则持久化1次 

save 300 10           300秒内执行10次set操作,则持久化1次

save 60 10000         60秒内执行10000次set操作,则持久化1次

  1. 持久化文件名称

 

  1. 持久化文件存储路径

 

如果需要修改持久化文件保存位置,则修改该文件 /绝对路径.

1.3    AOF模式

说明:

  1. AOF模式通过持久化文件记录了用户的全部的操作过程.该模式可以实现数据的实时备份.
  2. AOF模式中持久化文件会很庞大.不易于解析.
  3. AOF文件没有加密处理.

特点:

   如果对数据完整性有特殊要求,则采用AOF模式.

1.3.1  AOF模式配置

  1. 开启AOF模式  如果改为yes后,redis持久化策略采用AOF模式.

 

  1. AOF持久化文件名称

 

  1. 持久化策略

appendfsync always      该配置表示如果用户执行set操作,就持久化1次

appendfsync everysec    每秒持久化一次

appendfsync no          持久化化

  1. 文件存储

通过dir文件,执行持久化文件位置.

 

1.4    Redis中内存策略

1.4.1  需求描述

Redis中的数据都保存在内存中.如果内存中一直添加数据,则可能会造成内存填满,内存溢出的现象.需要控制redis的内存大小.

1.4.2  LRU算法

内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

 

 

1.4.3  内存策略介绍

volatile-lru 在已经设定了超时时间的数据中,选择最少使用的数据进行删除.

allkeys-lru   选择全部值,采用LRU算法进行删除.

volatile-random 在设定了超时时间的数据中随机删除.

allkeys-random 在所以的key中随机删除.

volatile-ttl      在设定了超时时间的数据中,按照超时时间倒叙排列,删除马上过期的数据.

Noeviction(默认策略)      如果选择该模式,在不删除数据,则直接报错给用户.

1.4.4  内存策略修改

560行

 

1.5    Redis分片技术

1.5.1  业务需求

  1. 如果需要动态的扩展内存,单个redis节点上有上限(10M默认-512M-1GB)
  2. 如果将数据保存到一个redis节点中,可能会出现丢数据的风险.所以尽可能分开保存.

1.5.2  Redis分片机制介绍

特点:

  1. 多台redis节点将内存扩大N倍
  2. 多台redis共同唯一所有的数据.每个节点中所保存的数据都不一样的.

 

1.5.3  Redis分片配置步骤

  1. 复制配置文件

 

  1. 修改端口号

 

1.5.4  启动多台redis

redis-server redis-6379.conf

[root@localhost shards]# redis-server redis-6380.conf

[root@localhost shards]# redis-server redis-6381.conf

[root@localhost shards]# ps -ef |grep redis

root      9789     1  0 19:41 ?        00:00:00 redis-server *:6379        

root      9794     1  0 19:41 ?        00:00:00 redis-server *:6380        

root      9798     1  0 19:41 ?        00:00:00 redis-server *:6381        

root      9804  7057  0 19:41 pts/2    00:00:00 grep redis

1.5.5  Redis分片入门案例

@Test

   public void test01(){

     

      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 shardedJedis =

            new ShardedJedis(shards);

      shardedJedis.set("1807","学习redis分片");

      System.out.println("获取数据:"+shardedJedis.get("1807"));

     

   }

 

posted on 2018-11-08 14:21  studyAnddaydayup  阅读(97)  评论(0编辑  收藏  举报