什么是 Redis?
- Redis is in the family of databases called key-value stores.
- Redis ( Remote DIctionary Server ) 通常被称为数据结构服务器。
键值存储的本质
The essence of a key-value store is the ability to store some data, called a value, inside a key. This data can later be retrieved only if we know the exact key used to store it.
- 键值存储的本质是在键中存储一些数据(被称为值)的能力。
- 仅当我们知道用于存储它的键时,才能在稍后检索此数据。
所以 Redis 的常规函数都是围绕键和值展开。
Redis支持的数据类型?
Redis 可以存储键和不同类型的值之间的映射。
键的类型只能为字符串。
值常见有五种数据类型:
- 字符串(string)。
- 列表(list)。
- 集合(set)。
- 哈希表(hash)。
- 有序集合。
Redis keys 命令
删改查。
删:
- DEL key [key ...]
改:
- RENAME key newkey
查:
key 所储存的值的类型
- TYPE key
查找所有符合给定模式的 key:
- KEYS pattern
过期相关:
设置过期时间:
- EXPIRE key seconds
获取剩余时间:
- TTL key
取消过期时间:
- PERSIST key
Redis 字符串 ( Strings )
设置键值对
- 设置一个:SET key value
- 同时设置一个或多个:MSET key value [key value ...]
通过键获取值
获取完整的值
获取指定键的值
- GET key
同时获取一个或多个键的值
- MGET key [key ...]
获取值的字符串的长度
- STRLEN key
获取值的子字符串
- GETRANGE key start end
覆写与追加
从偏移量 offset 开始用 value 覆写给定 key 所储存的字符串值
- SETRANGE key offset value
将 value 追加到 key 原来的值的末尾
- APPEND key value
指定键对应的值的增与减
增
- 自增:INCR key
增量:
- 整型:INCRBY key increment
- 浮点型:INCRBYFLOAT key increment
减
- 自减:DECR key
- 减量: DECRBY key decrement
Redis 哈希 ( Hashes )
Hashes are maps between string fields and string values, so they are the perfect data type to represent objects (eg: A User with a number of fields like name, surname, age, and so forth):
hash 是表示对象的完美数据类型。
在学习 php 的过程中好像没怎么听过 hash ,但是你一定用过:哈希表也叫散列表,更多地被称为关联数组。
设置键域(字段)值。
为指定键设置字段值:
- HSET key field value [field value ...]
- 从 Redis 4.0 起,HSET 可以一次设置一个或多个 field/value 对。
同时将多个 field-value (域-值)对设置到哈希表 key 中:
- HMSET key field value [field value ...]
获取指定键的字段或值的信息。
获取所有字段和值:
- HGETALL key
获取给定字段(单个)的值:
- HGET key field
- 类似于 $arr[$field]
获取所有给定字段的值:
- HMGET key field [field ...]
获取哈希表中所有值:
- HVALS key
- 类似于 array_values
获取给定字段的值的字符串长度:
- HSTRLEN key field
获取哈希表中字段的数量:
- HLEN key
- 类似于 count(array $arr)
获取所有哈希表中的字段:
- HKEYS key
- 类似于 array_keys
删除一个或多个哈希表字段
- HDEL key field [field ...]
指定键中的字段的值的增
- 值为整数的增量:HINCRBY key field increment
- 值为浮点数的增量:HINCRBYFLOAT key field increment
Redis 列表 ( Lists )
A list is a series of ordered values.
通过索引设置列表元素的值
- LSET key index element
获取指定键的列表的信息:
通过索引获取列表中的元素:
- LINDEX key index
- 类似于 $arr[1]
获取列表指定范围内的元素
- LRANGE key start stop
获取列表长度:
- LLEN key
- 类似于 count($arr)
删除指定键的列表的元素:
移除列表元素:LREM key count element
- count > 0: 从头到尾删除值为 value 的元素。
- count < 0: 从尾到头删除值为 value 的元素。
- count = 0: 移除所有值为 value 的元素。
对一个列表进行修剪(trim)
- LTRIM key start stop
- Redis LTRIM 用于修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。
移出并获取列表的第一个元素:
- LPOP key
- 类似于 array_shift($list)
移除并获取列表最后一个元素:
- RPOP key
- 类似于 array_pop($list)
向指定键添加元素:
将一个或多个值插入到
列表头部
:- LPUSH key element [element ...]
- 类似于 array_unshift(array,value1,value2,value3...)
向存存储在 key 中的列表的尾部插入所有指定的值:
- RPUSH key element [element ...]
- 类似于 array_push(array,value1,value2...)
在列表的某个元素前或者后插入元素(定点添加):
- LINSERT key BEFORE|AFTER pivot element
在这些个函数当中,大多数函数通过函数名就能理解其作用,但是 LTRIM
、 LINSERT
这两个函数没接触过,还是通过一些例子来理解其功能:
LTRIM 函数的例子:
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
// 保留索引从 1 到 -1 的元素。
// 这里的 -1 可以理解为倒数第一个元素的索引。
// 例如:[0=>'one',1=>'two',2=>'three'],那么 -1 就是索引 2 。
redis> LTRIM mylist 1 -1
"OK"
redis> LRANGE mylist 0 -1
1) "two"
2) "three"
LINSERT 函数的例子:
redis> RPUSH mylist "Hello"
(integer) 1
redis> RPUSH mylist "World"
(integer) 2
// 在 world 的前面添加 there
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
redis> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
Redis 集合 ( Sets )
A set is similar to a list, except it does not have a specific order and each element may only appear once.
从上面这段话就可以得出 set 的特性:
- 无序性。
- 互异性。
相较于数学中的集合,还少了 确定性
。
集合的应用场景:
In a set is very fast to test for membership, that is, to immediately know if a given element was added or not. Moreover in a set a given element can exist only in a single copy.
向指定键的集合中添加一个或多个成员
- SADD key member [member ...]
获取指定键中集合的信息:
获取集合的成员数:
- SCARD key
- 类似于 count($arr)
获取集合中的所有成员:
- SMEMBERS key
随机获取集合中的元素:
- SRANDMEMBER key [count]
删除集合中的元素:
移除集合中一个或多个成员:
- SREM key member [member ...]
移除并返回集合中的一个随机元素
- SPOP key [count]
集合的交并补:
交集:
- SINTER key [key ...]
将交集存储到 destination 集合中:
- SINTERSTORE destination key [key ...]
并集:
- SUNION key [key ...]
将并集存储到 destination 集合中:
- SUNIONSTORE destination key [key ...]
补集:
- SDIFF key [key ...]
将补集存储到 destination 集合中:
- SDIFFSTORE destination key [key ...]
将某个元素从 A 集合移动到 B 集合:
- SMOVE source destination member
判断 member 元素是否是集合 key 的成员:
- SISMEMBER key member
Redis 有序集合 ( Sorted Sets )
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数 ( score ) 却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
感觉有 序集合
就是 列表
与 集合
的混合体。
大多数函数在之前都遇到过,看到函数名大概就能猜到其功能,就不一一列举了。还是记录几个典型或者没遇见过的函数吧。
向有序集合添加一个或多个成员,或者更新已存在成员的分数
- ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
返回有序集合中指定成员的索引
ZRANK key member
例子:redis> ZRANK myzset 'one' (integer) 0 redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" (integer) 1 redis> ZRANK myzset "three" (integer) 2 redis> ZRANK myzset "four" (nil) redis> ZADD myzset 5 'five' (integer) 1 redis> ZRANGE myzset 0 -1 1) "one" 2) "two" 3) "three" 4) "five" redis> ZRANK myzset 'five' (integer) 3
返回有序集中,成员的分数值
- ZSCORE key member
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。