Hi Redis
Redis是一个远程内存非关系数据库,由于常驻内存,所以速度非常快。
数据持久化
那就要考虑一个问题,如果服务器关闭,数据存哪?Redis提供两种不同形式的持久化方法,将内存中的数据存储到硬盘。
- 时间点转储:指定时间段内有指定的写操作执行,再通过调用转储到硬盘的命令来执行。
- 追加写入:将所有修改数据库的命令都写入一个只追加文件里面,用户可根据数据的重要程度,进行同步频率的设置。
数据结构
Redis可以存储 key与5种不同数据结构类型之间的映射。这5种结构类型分别为:
- STRING(字符串):一般存字符串,整数,浮点数;
- LIST (列表):一个链表,每个节点都包含一个字符串;
- SET (集合):字符串的无序收集器,包含的每个字符串都是唯一的;
- HASH (散列):键值对的无序散列表;
- ZSET (有序集合):字符串成员与浮点数分值间的有序映射,元素排序取决于分值大小,有点类型有序的二元数组;
STRING 操作
就是常见键值对操作
1 | redis-cli |
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时间戳 |
原文作者: ybphp
原文链接: https://www.ybphp.com/2018/03/27/Redis/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)