当前位置 博文首页 > 韩超的博客 (hanchao5272):Redis:简介、数据结构、回收策略、
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
二进制
安全的字符串。
应用举例
:MySql的缓存层、视频播放量累加计数、共享Session、限速。插入顺序排序
的字符串元素的列表。他们基本上就是链表(linked lists)。
应用举例
:栈(lpush+lpop)、队列(lpush+rpop)、有限集合(lpush+ltrim)、消息队列(lpush+brpop)、。不重复
且无序
的字符串元素的无序集合。
应用举例
:标签。不重复
且有序
的字符串元素的有序集合。
范围查询
:给我前面10个或者后面10个元素。应用举例
:消息重试、排行榜。应用举例
:对象信息(对象的每个属性对应一个键)。key
对应的value
是0还是1。
应用举例
:存储用户的在线状态:在线=1,离线=0。应用举例
:注册 IP 数、每日访问 IP 数、页面实时UV)、在线用户数等。GEOPOS
从键里面返回所有给定位置元素的位置(经度和纬度)。GEODIST
返回两个给定位置之间的距离。GEORADIUS
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。应用举例
:地图位置。当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据是件很方便的事情。
LRU是Redis唯一支持的回收方法,所谓LRU即:Least Recently Used,最近最少使用算法。
Redis的maxmemory
指令用于将可用内存限制成一个固定大小。Redis的maxmemory
指令用于将可用内存限制成一个固定大小
maxmemory 100mb
设置maxmemory
为0代表没有内存限制。对于64位的系统这是个默认值,对于32位的系统默认内存限制为3GB。
当maxmemory限制达到的时候Redis会使用的行为由 Redis的maxmemory-policy配置指令来进行配置。
以下的策略是可用的:
策略选择举例:
Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。
RDB 是 Redis 默认的持久化方案。
在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中,即在指定目录下生成一个dump.rdb文件。
Redis 重启会通过加载dump.rdb文件恢复数据。
RDB配置方式(redis.conf):
## save 指定时间间隔内 执行指定次数的更新操作
## 如果900秒内有1次更新操作,或者300秒内有10次更新操作,或者60秒内有10000次更新操作,则将内存数据持久化至磁盘。
save 900 1
save 300 10
save 60 10000
## 指定本地数据库文件名
dbfilename dump.rdb
## 指定数据库存放陌路
dir ./
## 默认开启数据压缩
rdbcompression yes
可以手动通过SAVE(阻塞持久化, 只管保存快照,其他的等待)和BGSAVE(异步非阻塞持久化)命令,让redis进行持久化操作。
工作方式:
采用RDB方式,如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。
从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 。
AOF配置方式(redis.conf)
## 开启AOF
appendonly yes
## 指定本地数据库文件名
appendfilename "appendonly.aof"
## 指定更新日志条件
# appendfsync always
appendfsync everysec
# appendfsync no
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。
这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
三种AOF更新方式:
缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。
针对AOF文件很大的问题,Redis提供了重建rebuild机制,