Redis数据类型和操作命令

来源:互联网 发布:淘宝代运营销售累不累 编辑:程序博客网 时间:2024/05/18 10:33

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。


Redis字符串操作命令:

1、SET key "value"---设置指定key的值

     设置成功返回 OK,value值要加双引号

2、GET key ---获取指定key的值

3、GETRANGE key start end ---返回key中字符串的子字符串

    start 和end决定字符串截取的位置和长度。

4、GETSET key value ---给指定key设置值,并返回key的旧值。

     若key没有旧值,则返回nil

5、GETBIT key offiset  ---对 key 所储存的字符串值,获取指定偏移量上的位(bit)

    当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

6、MGET key1[key2...] ---获取一个或多个给定的key值

     若给定的key中,有某个key不存在,则返回这个key的特殊值nil

7、SETBIT key offset [value] ----对key所存储的字符串值,设置或清除指定偏移量上的位

     返回指定偏移量原存储的位

8、SETEX key seconds value ----设置key的值,并将key的过期时间设为seconds秒

     若key已经存在,替换key的旧值。设置成功返回OK

9、SETNX key value --- 只在key不存在时设置key值

     设置成功返回1,设置失败返回0

10、SETRANGE key offset value ---从偏移量offset开始,用value覆写给key的值

     返回被修改后的字符串长度

11、STRLEN  key ---返回key所存储的字符串长度

    若key不存在,返回0

12、MSET key value[key value.....]---同时设置多个key--value对

    返回OK

13、MSETNX key  value[key value....]---同时设置多个key--value对,仅在所有key都不存在时成功

   成功返回1,失败返回0. Msetnx是原子性操作,都成功或都失败。

14、PSETEX key milliseconds value ---以毫秒为单位设置key的有效期

      设置成功返回OK

15、INCR key ----将key中存储的数字值增一  

      如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

      如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

      本操作的值限制在 64 位(bit)有符号数字表示之内。

16、INCRBY key increment ---将key所存储的值加上指定增量increment  

      ......(规则同上)

17、INCRBYFLOAT key increment ---将key所存储的值加上给定浮点增量increment

       如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

18、DECR key ---将key所存储的数字值减一  

      如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。

      如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

      本操作的值限制在 64 位(bit)有符号数字表示之内。

19、DECRYBY key decrement ---key所存储的数字值减去指定减量值

      ......(规则同上)

20、APPEND key value ----为指定key值,追加值value(字符串拼接)    

      如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

      如果 key 不存在, APPEND 就简单地将给定 key 设为 value 。

Redis 哈希(Hash)

 是一个string类型的field和value的映射表,hash特别适合用于存储对象

Redis哈希操作命令:

1、HDEL key field1[field2...] ---删除一个或多个哈希表字段,不存在的字段被忽略

    返回被删除的字段的数量,不包括被忽略的字段

2、HEXISTS key field ---查看哈希表中指定字段是否存在

    若哈希表中存在该字段,返回1;若key不存在或key中不存在该字段,返货0

3、HGET key field ---获取表中指定字段的值

   返回指定字段值,若key或字段不存在则返回nil

4、HGETALL key ---获取表中所有的字段和值

    以列表的形式返回哈希表的字段和值,若key不存在返回空列表。

5、HINCRBY key field increment ---为哈希表key中指定字段的整数值加上增量increment(可以为负数)

     如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

     如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

     对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

     本操作的值被限制在 64 位(bit)有符号数字表示之内。

     返回相加后的字段值

6、HINCRBYFLOAT key field increment--- 为哈希表key中指定字段的浮点数值加上增量increment

    ----(规则同上)

7、HKEYS key --- 获取哈希表中所有字段

    包含哈希表中所有域(field)列表。当 key 不存在时,返回一个空列表。 

8、HLEN key--- 获取哈希表中字段数量

    返回哈希表中字段数量,若key不存在,返回0。

9、HMGET key field[field...] ---获取给定字段值

     返回一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

     如果指定的字段不存在于哈希表,那么返回一个 nil 值。

10、HMSET key field1 value1[field2 value2....] ---同时给哈希表设置多个field - value值    

     此命令会覆盖哈希表中已存在的字段。

     如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

     设置成功返回OK

11、HSET key field value ---将哈希表key中field字段值设置为value

      如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作;如果字段已经存在于哈希表中,旧值将被覆盖。

      如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

12、HSETNX key field value ---只有在key中字段field不存在时,设置该字段值。 

       如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作;如果字段已经存在于哈希表中,操作无效。

       设置成功,返回 1 ;设置失败,返回 0 。

13、HVALS key ---获取key中所有字段的值,不包含field字段

14、HSCAN key cursor [MATCH pattern] [COUNT count]  ----迭代哈希表中的键值对。

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

Redis列表操作命令

1、BLPOP key1[key2...] timeout ---移除并获取列表第一个元素,如果列表没有元素会阻塞列表直到等待超时

     如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待timeout秒后会返回 nil

2、BRPOP key1[key2...] timeout ----移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时

    假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key

第二个元素   是被弹出元素的值

3、BRPOPLPUSH source destination timeout ---从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;

                                                                      如果列表没有元素会阻塞列表直到等待超时

   假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值

第二个元素是等待时长。

4、LINDEX key index ---通过索引获取列表中的元素

     也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

     列表中下标为指定索引值的元素。如果指定索引值不在列表的区间范围内,返回 nil 。

5、LINSERT key before/after pivot value ---在列表元素前/后插入元素

    当指定列表key或元素不存在时,不执行任何操作。如果 key 不是列表类型,返回一个错误。

     如果命令执行成功,返回插入操作完成之后,列表的长度。

     如果没有找到指定元素 ,返回 -1 。如果 key 不存在或为空列表,返回 0

6、LLEN key ---获取列表长度

     如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。如果 key 不是列表类型,返回一个错误。

7、LPOP key ---移除并获取列表第一个元素

     返回列表的第一个元素。当列表 key 不存在时,返回 nil 。

8、LPUSH key value1[value2...] ---将一个或多个值插入到列表头部

   返回执行 LPUSH 命令后,列表的长度。

9、LPUSHX key value ---将一个值插入到已存在列表的头部,若列表不存在操作无效。

    返回执行 LPUSHX 命令后,列表的长度。

10、LRANGE key start stop ---获取列表指定范围内元素

     0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推,你也可以使用负数下标。

     返回一个列表,包含指定区间内的元素。

11、LREM key count value ---移除列表元素,根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

     count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。

      count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

     count = 0  : 移除表中所有与 VALUE 相等的值。
     返回被移除元素的数量。列表不存在时返回 0 。

12、LSET key index value ---通过索引设置列表元素的值

     当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。操作成功返回OK

13、LTRIM key start stop ---让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

      操作成功返回OK

14、RPOP key ----移除并获取列表最后一个元素

15、RPOPLPUSH source destination ---命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

     返回被弹出的元素。

16、RPUSH key value1[value2...] ---于将一个或多个值插入到列表的尾部(最右边)。

     如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。当列表存在但不是列表类型时,返回一个错误。

     返回执行 RPUSH 操作后,列表的长度。

17、RPUSHX key value ---将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

     返回执行 Rpushx 操作后,列表的长度。

Redis 集合(Set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

Redis 集合操作命令:

1、SADD key member1[member2...] ---向集合添加一个或多个成员,已经存在于集合的成员元素将被忽略。

     假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。

     返回被添加到集合中的新元素的数量,不包括被忽略的元素。

2、SCARD key ---获取集合的成员数,key不存在时返回0

3、SDIFF key1[ key2 ...] ----返回给定集合之间的差集,不存在的集合 key 将视为空集。

4、SDIFFSTORE destination key1[key2...] ---返回给定所有集合的差集并存储在指定集合 destination 中

    返回结果集中的元素数量。

5、SINTER key1[ key2...] ---返回指定集合的交集

6、SINTERSTORE destination key1[key2] ---返回给定所有集合的交集并存储在指定集合 destination 中

7、SYSMENBER key member ---判断member是否是key的成员

      如果成员元素是集合的成员,返回 1 。如果成员元素不是集合的成员,或 key 不存在,返回 0

8、SYSMEMBERS key ---返回集合中所有成员,不存在的集合 key 被视为空集合。

9、SMOVE source destination  member ---将 member 元素从 source 集合移动到 destination 集合  

     SMOVE 是原子性操作。

     如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。

     否则, member 元素从 source 集合中被移除,并添加  到 destination 集合中去。

     当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

     当 source 或 destination 不是集合类型时,返回一个错误。

10、SPOP key ----移除并返回集合中一个随机元素,当集合不存在或是空集时,返回 nil

11、SRANDMEMBER  key [count] ----随机返回集合中一个或多个元素

     如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数

那么返回整个集合。

     如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

     只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

12、SREM key member1[menber2...] ---移除集合中的一个或多个成员元素,不存在的成员元素会被忽略

     返回被成功移除的元素的数量,不包括被忽略的元素。

13、SUNION key1[key2...] ---返回给定集合的并集

14、SUNIONSTORE destination key1[key2...] ---所有给定集合的并集存储在 目标集合destination 中,如果 destination 已经存在,则将其覆盖。

      返回结果集中的元素数量。

15、SSCAN key cursor [MATCH pattern] [COUNT count]  ---迭代集合中的元素

     返回数组列表

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数,来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

Redis 有序集合操作命令:

1、ZADD key score1  menber1 [score2 member2 ......] ---- 向有序集合添加一个或多个成员,或更新已存在成员的分数。

      如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

     返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

2、ZCARD key ----  获取有序集合的成员数,key 不存在时,返回 0

3、ZCOUNT key min max ---计算在有序集合中指定区间分数内的成员数

4、ZINCRBY key increment member ---对集合中指定成员分数加上增量increment

      当 key 不存在,或分数不是 key 的成员时,创建指定集合和成员 。

5、ZINTERSTORE destination numkeys key[key...] ---计算给定的多个有序集的交集并将结果集存储在新的有序集destination中

      默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

      返回保存到目标结果集的的成员数量。

6、ZLEXCOUNT key min max ---在有序集合中计算指定字典区间内成员数量

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e(integer) 5redis 127.0.0.1:6379> ZADD myzset 0 f 0 g(integer) 2redis 127.0.0.1:6379> ZLEXCOUNT myzset - +(integer) 7redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f(integer) 5
7、ZRANGE key start stop [WITHSCORES] ---返回集合中指定索引区间内成员

     成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列(值递减(从大到小)来排列,请使用ZREVRANGE 命令)。

    下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

    你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

8、ZRANGEBYLEX key min max [LIMIT offset count] ---通过字典区间返回有序集合的成员

9、ZRANGEBYSCORE  key min max [WITHSCORES] [LIMIT] ---返回指定分数区间内成员

       有序集成员按分数值递增(从小到大)次序排列

       区间的取值默认使用闭区间 ,你也可以通过给参数前增加 “ ( ” 符号来使用可选的开区间 (小于或大于)。

10、ZRANK key member  ----返回集合中指定成员索引(成员的排名)

     如果成员不存在,返回 nil 。

11、ZREM key member [member ...] ----移除集合中的成员,不存在的成员将被忽略。

     返回被成功移除的成员的数量,不包括被忽略的成员。

12、ZREMRANGEBYLEX key min max ---移除集合中给定字典区间内的成员

    返回被成功移除的成员数量

13、ZREMRANGEBYRANK key start stop ----移除集合中给定排名区间的成员

   返回被移除的成员数量

14、ZREMRANGEBYSCORE key min max ----移除集合中给定分数区间内的成员

15、ZREVRANGE key start stop [WITHSCORES] ----通过索引,返回集合中指定区间内的成员,降序排列

16、ZREVRANGEBYSCORE key max min [WITHSCORES] ----返回集合中指定分数区间内的成员,降序排列

17、ZREVRANK key member ----返回有序集合中指定成员的排名,有序集成员按分数值降序排列

18、ZSCORE key member ----返回集合中成员的分数值

19、ZUNIONSTORE  destination numkeys key [key...] ----计算给定的一个或多个有序集的并集,并存储在新的集合destiantion中

    numkeys 代表合并的集合数量

20、ZSCAN key cursor [MATCH pattern] [COUNT count] ----迭代有序集合中的元素(包括元素成员和元素分值)

    返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

  

























原创粉丝点击