Redis不仅仅是缓存
嘻嘻发布于2020-08-06
最后更新于2020年8月6日
浏览在谈论缓存和共享缓存时,我们大多数人都会想到memcached。Memcached轻巧,易于配置并且具有非常好的性能。但是,当缓存的数据更重要时会发生什么呢?让我们来看看Redis!
由于服务器中断而导致的缓存会话的丢失并不是很糟糕,但是当需要重新登录时,可能客户的厌烦。当数据变得越来越重要时,大多数人会想到持久性,备份,还原和高可用性。这就是Redis发挥作用的关键点,它提供了很多功能,可以同时使用:一方面是快速键值内存数据库,另一方面是数据持久性,高可用性,复制。
Redis支持的数据结构
Redis本身不是简单的键值存储。它甚至处理和支持具有不同类型值的数据结构。以下是受支持的类型和结构的简短概述:
- 二进制安全字符串
- Lists:字符串集合,按插入时间排序
- Sets:唯一,未排序字符串的集合
- Sorted sets:字符串通过称为得分的浮点数排序(可能会超出范围:给我前十名或后十名)
- 哈希:由具有值的字段组成的地图(类似于python和ruby哈希)
- 位数组(位图):处理字符串值,例如数组。分别设置和清除位。
- HyperLogLogs:估计集合的基数
LRU缓存
将Redis用作缓存系统时,它可以处理数据集并自动清除旧数据。
通常,您可以设置“ maxmemory”指令来限制数据集的内存量。
您可以在Redis上配置不同的行为,当达到内存限制时,就会采用清除策略。
主从复制
主服务器和从服务器之间的复制设置非常容易配置。“ slaveof”选项将节点定义为从节点。
有关复制的基本事实是:
- 使用异步复制
- 主节点可以有多个从节点,从节点也可以有从节点。
- 复制在主服务器上无阻塞
- 复制在从属服务器上是非阻塞的,从属服务器可以在初始同步期间处理来自数据集旧版本的查询
- 可用于扩展只读查询或数据冗余
- 最佳实践是在主服务器上启用磁盘持久性
为了获得一点安全性,您可以通过密码添加基本身份验证,以便只有允许的从属才能复制。
持久化
AOF
- 记录每个写操作
- 万一Redis停止工作,数据丢失最少
- 日志是人类可读的,可以删除命令(例如flushall)
- 损坏的文件很容易重建
RDB
- 时间点快照,非常适合备份
- 非常紧凑
- 易于转移和还原
- Redis将派生一个子进程。它将用于写时复制。
AOF + RDB
- 可以同时启用两者
- 当RDB和AOF文件同时存在时,将在启动时使用AOF
高可用性
当您的数据集变得越来越重要时,您可能会考虑在没有任何人工干预的情况下实现高可用性,Redis会失败。Redis Sentinel仅提供:监视,通知和自动故障转移。另外,它还充当客户端的配置提供程序。
功能
- 监视: Sentinel检查主机和从机是否按预期工作
- 通知: Redis实例出现问题时通过API进行通知
- 自动故障转移:如果主服务器无法按预期工作,则Sentinel可以启动故障转移过程。一个从站将升级为主站,其他从站会自动重新配置。通知应用程序要使用的新地址。
- 配置提供程序:客户端可以使用Sentinel进行服务发现,以获取当前的Redis主服务器。
更多
Redis支持更多功能,其中一些是:
- 事务
- 订阅/分发
- Lua脚本
- KEY的过期时间
- 开发和使用自己的模块
- Redis集群
- 通过CLI访问
- 大多数编程语言可以与Redis一起使用