redis的内存回收
当redis被用作缓存时,可以使用redis的回收策略自动的回收旧的数据
maxmenmory 用于配置Redis存储数据时指定限制的内存大小
maxmenmory 100mb #设置maxmemory为0代表没有内存限制。
redis的回收策略:
- noeviction:当内存达到限制,客户端会返回错误
- allkeys-lru:回收使用最少的键,使新添加的数据有存放的空间(高效的策略)
- volatile-lru:在过期集合的键里回收使用最少的键
- allkeys-random:回收随机的键,使新添加的数据有存放的空间
- volatile-random:在过期集合的键里回收随机的键,使新添加的数据有存放的空间
- volatile-ttl:在过期集合的键里优先回收存活时间(TTL)较短的键
Redis的分区
分区是将你的数据分发到不同redis实例上的一个过程,每个redis实例只是你所有key的一个子集
分区的优势:
- 分区可以让Redis管理更大的内存,redis将可以使用所有机器的内存。如果没有分区,则只能使用一台集器的内存
- 分区使Redis的计算能力通过计算机的增加得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。
分区的缺点:
- 涉及多个key的操作通常是不被支持的。比如,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
- 同时操作多个key,则不能使用Redis事务。
- 分区使用的粒度是key,不能使用一个非常长的排序key存储一个数据集
- 当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
- 增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding(预分片)的技术对此是有帮助的。
预分区
-
目的
- 在redis做缓存时,动态增加/删除redis节点非常麻烦,防止以后的扩容,提前做准备 实现
- 在一开始的时候在同一台服务器上启动多个redis实例,在数据不断增加以后,需要扩容时,只需将redis的实例从一台服务器迁移到灵台服务器即可,使用redis的主从复制,可以实现不停机扩容