Redis是一个远程内存非关系数据库,由于常驻内存,所以速度非常快。

数据持久化

那就要考虑一个问题,如果服务器关闭,数据存哪?Redis提供两种不同形式的持久化方法,将内存中的数据存储到硬盘。

  • 时间点转储:指定时间段内有指定的写操作执行,再通过调用转储到硬盘的命令来执行。
  • 追加写入:将所有修改数据库的命令都写入一个只追加文件里面,用户可根据数据的重要程度,进行同步频率的设置。

数据结构

Redis可以存储 key与5种不同数据结构类型之间的映射。这5种结构类型分别为:

  • STRING(字符串):一般存字符串,整数,浮点数;
  • LIST (列表):一个链表,每个节点都包含一个字符串;
  • SET (集合):字符串的无序收集器,包含的每个字符串都是唯一的;
  • HASH (散列):键值对的无序散列表;
  • ZSET (有序集合):字符串成员与浮点数分值间的有序映射,元素排序取决于分值大小,有点类型有序的二元数组;

STRING 操作

就是常见键值对操作

1
2
3
4
5
redis-cli
auth your password
set hello redis
get hello
del hello

string命令

LIST 操作

这个链表的结构使Redis在键值存储的世界独树一帜

  • RPUSH :将给定值推入到列表的右端;
  • LRANGE: 获取列表在给定范围内的所有值;
  • LINDEX: 获取列表在给定位置上的单个元素;
  • LPOP: 获取从列表左边弹出的一个值;

列表操作

SET 操作

与列表不同的是,列表可以存相同的字符串,集合则通过散列表来保证自己存的字符串唯一。还有集合是无序存储的,所以就没有那种类似出入栈的操作了。

集合操作

HASH 操作

散列可以存储多个键值对之间的映射,一个类似mini版redis的存在。

命令 行为
hset 在散列里面关联给定的键值对,返回一个值表示给定的值是否存在
hget 获取指定散列键的值
hgetall 获取散列包含的所有键值对
hdel 移除散列里面存在的这个键

ZSET 操作

有序集合的key称为成员,每个成员都是不同的,有序集合的value称为分值,必须为浮点数。有序集合是Redis里面唯一即可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素结构。

命令 行为
zadd 将一个给定分值的成员添加到有序集合里面,返回新添加元素的数量
zrange 获取有序集合所有元素,按分值大小排序
zrangebyscore 获取有序集合在给定分值范围内的所有元素
zrem 移除有序集合元素,返回移除元素的数量

键的过期时间

Redis存储数据时,很多数据都是用一段时间就不用了,比如用户登录token,需要设置有效期。这时可以通过Redis的过期时间特性,让一个键在完成生存周期后自动删除,降低Redis的内存占用。
需要注意的是:对于散列,集合,列表这样的容器来说,键过期命令只能为整个键设置,不能对里面单个元素设置过期时间。

命令 语法 描述
persist persist key 移除key的过期时间
ttl ttl key 查看key距离过期还有多少秒
expire expire key seconds 让key在指定的秒数后过期
expireat expireat key timestamp 将给定键的过期时间设置为UNIX时间戳
pttl pttl key 查看给定键距离过期时间还有多少秒
pexpire pexpire key milliseconds 让key在指定的毫秒数之后过期(在Redis2.6+版本支持)
pexpireat pexpireat key timestamp-milliseconds 将key的过期时间设置为毫秒级的UNIX时间戳