Redis基础入门

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中字符串类型最大只能保存512MB

    1. 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:只在键已经存在时,才对键进行设置操作。

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
    7
    redis> 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
    7
    redis> 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
2
3
4
5
6
7
redis> LPUSH mylist a b c
(integer) 3

redis> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "a"

2. RPUSH key value [value …]

将一个或多个值value插入到列表key的表尾(最右边),如果有多个value值,那么各个value值按从左到右的顺序依次插入

  • 返回执行命令后列表的长度
    1
    2
    3
    4
    5
    6
    7
    redis> 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]

通过索引区间返回有序集合成指定区间内的成员

参考链接

第二章 Redis API的使用 单线程介绍【Redis入门教程】

Redis简易入门教程

-------------本文结束感谢您的阅读-------------