Redis基础教程
简介
Redis是一个高性能key-value数据库
通用命令
- KEYS[pattern]: 时间复杂度为O(n),查询所有符合给定模式pattern的key。返回符合给定模式的key列表。
- DESIZE key: 返回当前数据库key的数量。计算时不是扫描整个表而是实时更新key总数。
- EXISTS key: 检查给定key是否存在。key存在返回1,否则返回0
- DEL key: 返回被删除的key的数量
- EXPIRE key seconds:为给定的key设置生存时间,当key过期会被自动删除。设置成功返回1,失败返回0。
- PERSIST key: 移除给定key,将这个key转换成持久的,当生存时间移除成功时,返回1。如果key不存在或者没有设置生存时间返回0。
- TTL key: 以秒为单位,给定返回key的剩余生存时间。当key不存在时,返回-2,当key存在但没有设置生存时间,返回-1.否则返回剩余生存时间。
五种数据结构
一、字符串:Redis中最基础的数据结构
Redis中字符串类型最大只能保存512MB1. SET key value [EX seconds][PX millseconds] [NX|XX]
- 将时间字符串value关联到key,如果key已持有其他值,set就覆写旧值,无视类型。
- 当set命令对一个带有生存时间(TTL)键进行设置之后,该键原有的TTL将被清除。
- 可选参数
- EX seconds:将键过期时间设置为seconds秒,执行
SET key value EX seconds
的效果相当于执行SETEX key seconds value
- PX milliseconds: 将键的过期时间设置为milliseconds毫秒。执行
SET key value PX milliseconds
的效果等同于执行PSETEX key milliseconds value
- NX:只在键不存在时,才对键进行设置操作。执行
SET key value NX
的效果等同于执行SETNX key value
。 - XX:只在键已经存在时,才对键进行设置操作。
- EX seconds:将键过期时间设置为seconds秒,执行
2. GET key
获取与键key相关联的字符串值。
- 如果key不存在返会nil,否则返回key的值。
- 如果key的值并非字符串类型,那么返回一个错误,GET命令只能用于字符串值
3. DEL key[key…]
删除指定的一个或者多个key,不存在的key会被忽略。
- 返回被删除的key的数量
4. MEST key value[key value…]
同时为多个键设置值,如果某个给定键已经存在,用MEST将新值去覆盖旧值。
- 总是返回OK
1
2
3
4
5
6
7redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK
redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"
5. MSETNX key value
当且仅当所有给定键都不存在时,为所有给定键设置值。即使只有一个给定键已经存在,MSETNX命令也会拒绝执行对所有键的设置操作。
- 当所有给定键都设置成功,命令返回1,如果因为某个给定键已存在而导致未能执行成功,返回0
6. MGET key[key…]
返回给定的一个或多个字符串键的值。如果给定的字符串键里面,有某个键不存在,那么这个键的值将以特殊值nil表示。
二、哈希
Redis的哈希是键值对的集合,是字符串字段和字符串值之间的映射。
1. HSET key field value
将哈希表key中域field的值设置为value,如果给定的哈希表不存在,那么一个新的哈希表将被创建并执行HSET操作,如果域field已存在于哈希表中,那么它的旧值将被新值value覆盖。
- 当新创建field域并成功为它设置值时,命令返回
- 当域field已经存在于哈希表,并且HSET命令成功使用新值覆盖了它的旧值,那么命令返回0
2. HGET key field
- 返回给定域的值,如果给定域不存在于哈希表中,又或者给定的哈希表并不存在,那么命令返回nil。
3. HGETALL key
以列表的形式返回哈希表的域和值
- 以列表形式返回哈希表的域和域的值,若key不存在,返回空列表。
4. HDEL key field [field]
删除哈希表key中的一个或多个指定域,不存在的域将被忽略。
- 被成功移除的域的数量,不包括被忽略的域。
5. HMSET key field value [field value …]
同时将多个field-value(域-值)对设置到哈希表key中,此命令会覆盖哈希表中已存在的域,如果key不存在,一个空哈希表被创建并执行HMSET操作。
- 如果命令执行成功,返回OK,当key不是哈希表(hash)类型时,返回一个错误。
6. HMGET key field[field…]
返回哈希表key中,一个或多个给定域的值,如果给定的域不存在于哈希表,那么返回一个nil值
- 返回一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。
1
2
3
4
5
6
7redis> HMSET pet dog "doudou" cat "nounou" #一次设置多个域
OK
redis> HMGET pet dog cat fake_pet #返回值的顺序和传入参数的顺序一样
1) "doudou"
2) "nounou"
3) (nil) #不存在的域返回nil值三、列表
列表用于存储多个有序的字符串,列表是一种比较灵活的数据结构,可以充当栈和队列的角色
1. LPUSH key value[value …]
将一个或多个值value插入到列表key的表头(最左边),如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头
- 返回执行命令后列表的长度
1 | redis> LPUSH mylist a b c |
2. RPUSH key value [value …]
将一个或多个值value插入到列表key的表尾(最右边),如果有多个value值,那么各个value值按从左到右的顺序依次插入
- 返回执行命令后列表的长度
1
2
3
4
5
6
7redis> RPUSH mylist a b c
(integer) 3
redis> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"
3. LPOP
移除头元素并返回被弹出的元素
4. RPOP key
移除尾元素并返回被弹出的元素
5. LINDEX key index
返回列表key中,下标为index的元素
- 如果index参数的值不在列表的区间范围内(out of range),返回nil
6. LINSERT key BEFORE|AFTER pivot value
将值value值插入到列表key当中,位于值pivot之前或之后,当pivot不存在于列表key时,不执行任何操作。
- 命令执行成功,返回插入操作完成之后,列表的长度。
- 如果没有找到pivot,返回-1。
- 如果key不存在或为空列表,返回0。
7. LRANGE key start stop
获取列表指定范围内的元素
8. LREM key count value
移除列表元素
9. LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
四、集合
Redis的Set是String类型的无序集合,集合成员都是唯一的。集合是通过hash表实现的。
1. SADD key member [member …]
将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略,假如key不存在,则创建一个只包含member元素作成员的集合,当key不是集合类型时,返回一个错误。
- 返回被添加到新集合中的元素,不包括被忽略的元素
2. SPOP key [count]
随机移除count个元素并返回被移除的元素
- 返回被移除的随机元素,当key不存在或key是空集时,返回nil。
3. SREM key member[member …]
移除集合key中的一个或多个member元素,不存在的member元素会被忽略,当key不是集合类型,返回一个错误。
- 返回被成功移除的元素个数,不包括被忽略的元素
4. SMEMBERS key
返回集合key中的所有成员,不存在的key被视为空集合。
- 返回值: 集合中的所有成员。
五、有序集合
Redis有序集合和集合一样也是String类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。Redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
1. ZADD key [NX|XX][CH][INCR] score member [score member …]
将一个或多个member元素及其score值加入到有序集key当中。如果某个member已经是有序集的成员,那么更新这个member的score值,并通过重新插入这个member元素,来保证该member在正确的位置上。score值可以是整数值或双精度浮点数。如果key不存在,则创建一个空的有序集并执行ZADD操作。当key存在但不是有序集类型时,返回一个错误。
- NX: member必须不存在,才可以设置成功,用于添加
- XX: member必须存在,才可以设置成功,用于更新
- CH:返回此次操作后,有序集合元素和分数发生变化的个数
- INCR:对scroe做增加,相当于ZINCRBY
2. ZREM key member [member …]
移除有序集key中的一个或多个成员,不存在的成员将被忽略,当key存在但不是有序集类型时,返回一个错误
- 返回被成功移除的成员的数量,不包括被忽略的成员。
3. ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员