redis的五种数据类型

「爱情、让人受尽委屈。」 2024-04-03 08:54 165阅读 0赞

目录

一、String数据类型

1、String数据类型概述

2、string 数据类型常用命令

1、set 设置指定 key 的值

2、get 获取指定 key 的值

3、append key values

4、exists key:判断该键是否存在

5、strlen key:获取指定key的字符长度

6、incr key:key值递增加1(key值必须为整数)

7、decr key:该Key的值递减1

8、getset :获取key值并返回,同时给key设置新值

9、incrby :减少指定的整数

10、decrby :增加指定的整数

11、setex :设置指定key的过期时间

12、setnx:不存在键的话执行set操作,存在的话不执行

13、mset:批量设置键对

14、mget:批量获取就键对

15、msetnx:批量设置键-值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0

二、list 数据类型

1、list 数据类型概述

2、list 数据类型常用类型

1、lpush(设置,创建):在头部(左侧left)依次插入列表元素

2、lpushx(相当于插入,从左侧插入):键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

3、lrange(获取,以下标索引的方式获取) :取从位置索引start到位置索引stop的所有元素(索引以0开始)

4、lpop :移除并返回mykey键的第一个元素,即从右往左第一个

5、lrem:从头部开始删除count个值为value的元素,并返回实际删除数量

6、lset:将位置索引为index的元素设置新值value

7、lindex:获取索引为index的元素

8、ltrim:仅保留从位置索引start到索引stop的元素

9、linsert :插入元素(利用before、after在指定元素前后插入)

10、rpush : 在列表的尾部依次插入value

11、rpushx :key必须存在才可执行,将value从尾部插入,并返回所有元素数量

12、rpop:在尾部弹出(移除)一个元素,并返回该元素

13、rpoplpush :在key1的尾部弹出一个元素并返回,将它插入key2的头部

三、Hash数据类型 (散列类型)

1、Hash数据类型概述

2、Hash数据类型常用命令

1、hset :给键值为myhash的键设置字段为##,值为##

2、hget:获取键值为##,字段为##的值

3、hdel:删除##键中字段名为##的字段

4、hexists:判断##键中是否存在##字段

5、hlen:命令获取##键的字段数量

6、hsetnx:通过hsetnx命令给##添加新字段##,其值为##,因为该字段已经被删除,所以该命令添加成功并返回1

7、hincrby:给键的字段的值加1

8、hgetall:获取键的所有字段及其值

9、hkeys:获取键中所有字段的名字

10、hvals:获取键中所有字段的值

11、 hmset:批量设置键的字段值

12、hmget:批量获取键的字段值

四、set数据类型(无序集合)

1、set数据类型概念

2、set数据类型常用命令

1、sadd:插入测试数据

2、smembers:查看插入的结果是否存在

3、scard:获取Set集合中元素的数量

4、sismember:判断f是否已经存在,返回值为0表示不存在

5、spop:随机的移除并返回set中的某一成员

6、srem:移除指定元素

7、srandmember:随机返回集合中的某一员

8、smove

五、Sorted Set数据类型 (zset、有序集合)

1、Sorted Set数据类型概述

2、Sorted Set数据类型常用命令

1、zadd :添加成员

2、zcard:获取成员数量

3、zcount:zcount key min max,分数满足表达式1 <= score <= 2的成员的数量

4、zrem:删除指定成员

5、zincreby:将成员one的分数增加-1,并返回该成员更新后的分数

6、zscore:获取成员的分数

7、zrange

8、zrank:获取成员的索引值


一、String数据类型

1、String数据类型概述

String是 redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等。

2、string 数据类型常用命令

1、set 设置指定 key 的值

  1. 127.0.0.1:6379> set lisi shangjia ## 给key:lisi 赋值shangjia
  2. OK
  3. 127.0.0.1:6379> get lisi ## 获取键:lisi的值
  4. "shangjia"

2、get 获取指定 key 的值

  1. 127.0.0.1:6379> get a3
  2. "3"

3、append key values

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。(若键不存在,则相当于创建)

  1. 127.0.0.1:6379> exists home ## 检测键:home是否存在
  2. (integer) 0 ## 返回值为0,表示不存在
  3. 127.0.0.1:6379> append home "cat" ## 原值不存在,此时相当于添加值
  4. (integer) 3
  5. 127.0.0.1:6379> get home ## 获取键:home的值
  6. "cat"
  7. 127.0.0.1:6379> append home "dog" ## 原键存在值,此时相当于在原值的基础上进行追加
  8. (integer) 6
  9. 127.0.0.1:6379> get home ## 获取键:home的值。呈追加状态
  10. "catdog"

4、exists key:判断该键是否存在

存在返回1,不存在返回0

  1. 127.0.0.1:6379> exists v5 ## 查询键:v5的是否存在并显示值
  2. (integer) 1 ## 返回值为1,表示存在
  3. 127.0.0.1:6379> get v5 ## 获取键:v5的值
  4. "5"
  5. 127.0.0.1:6379> exists wangwu ## 查询键wangwu是否存在并显示值
  6. (integer) 0 ## 返回值为0,表示不存在
  7. 127.0.0.1:6379> get wangwu
  8. (nil)

5、strlen key:获取指定key的字符长度

  1. 127.0.0.1:6379> strlen v5
  2. (integer) 1
  3. 127.0.0.1:6379> strlen home
  4. (integer) 6

6、incr key:key值递增加1(key值必须为整数)

  1. 127.0.0.1:6379> set a 34 ## 设置key:a的values为34
  2. OK
  3. 127.0.0.1:6379> incr a ## key值递增加1
  4. (integer) 35
  5. 127.0.0.1:6379> get a ## 验证为递增加一
  6. "35"

7、decr key:该Key的值递减1

  1. 127.0.0.1:6379> get a
  2. "35"
  3. 127.0.0.1:6379> decr a ## key值递减1
  4. (integer) 34
  5. 127.0.0.1:6379> get a
  6. "34"

8、getset :获取key值并返回,同时给key设置新值

  1. 127.0.0.1:6379> getset m5 666 ## 键m5键值不存在情况下,直接赋予值为666
  2. (nil)
  3. 127.0.0.1:6379> get m5
  4. "666"
  5. 127.0.0.1:6379> getset m5 777 ## 当存在时,覆盖原值。为777
  6. "666"
  7. 127.0.0.1:6379> get m5
  8. "777"

9、incrby :减少指定的整数

  1. 127.0.0.1:6379> set b 20 ### 设置键b值等于5
  2. OK
  3. 127.0.0.1:6379> incrby b 5 ### 设置递增为5
  4. (integer) 25
  5. 127.0.0.1:6379> incrby b 5
  6. (integer) 30

10、decrby :递减指定的整数

  1. 127.0.0.1:6379> get b ## 获取键值
  2. "12"
  3. 127.0.0.1:6379> decrby b 3 ## 设置递减整数为3
  4. (integer) 9
  5. 127.0.0.1:6379> decrby b 3
  6. (integer) 6

11、setex :设置指定key的过期时间

redis: -1 往往代表的是一个上限,表示所有的意思
: -2 表示的失效/过期

  1. 127.0.0.1:6379> setnx b 30 ## 当键名为b值为30不存在时则创建
  2. (integer) 1
  3. 127.0.0.1:6379> ttl b ## 查看键b的键值对有效时间
  4. (integer) -1 ## 默认为永久失效
  5. 127.0.0.1:6379> setex b 10 30 ## 设置键值对b、30失效时间为10秒
  6. OK
  7. 127.0.0.1:6379> ttl b
  8. (integer) 8
  9. 127.0.0.1:6379> ttl b
  10. (integer) 7
  11. 127.0.0.1:6379> ttl b
  12. (integer) 6
  13. 127.0.0.1:6379> ttl b
  14. (integer) 3
  15. 127.0.0.1:6379> ttl b ## 返回值为-2,键值对失效
  16. (integer) -2
  17. 127.0.0.1:6379> get b ## 获取键值对。值为nil
  18. (nil)

12、setnx:不存在键的话执行set操作,存在的话不执行

  1. 127.0.0.1:6379> get c ## 获取键值对,返回值为nil,不存在
  2. (nil)
  3. 127.0.0.1:6379> set c 40 ## 设置键值对c、40
  4. OK
  5. 127.0.0.1:6379> setnx c 40 ## 设置键值对c、40,返回值为0.说明已存在,设置失败
  6. (integer) 0
  7. 127.0.0.1:6379> setnx d 40 ## 设置键值对d、40 ,返回值为40,设置成功
  8. (integer) 1
  9. 127.0.0.1:6379> get c ## 获取键值对
  10. "40"
  11. 127.0.0.1:6379> get d ## 获取键值对
  12. "40"

13、mset:批量设置键对

14、mget:批量获取就键对

  1. 127.0.0.1:6379> mset a 10 b 20 c 30 d 40 ## 批量设置键值对
  2. OK
  3. 127.0.0.1:6379> mget a b c d ## 批量获取键值对
  4. 1) "10"
  5. 2) "20"
  6. 3) "30"
  7. 4) "40"

15、msetnx:批量设置键-值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0

  1. 127.0.0.1:6379> msetnx c 30 d 50 e 60 ## 批量设置键值对设置条件,当有一个存在时,整条不生效
  2. (integer) 0 ## 返回值为0,不生效
  3. 127.0.0.1:6379> mget c d e ## 批量获取键值对,由于c和d 存在,以上设置e没生效为nil
  4. 1) "30"
  5. 2) "40"
  6. 3) (nil)

二、list 数据类型

1、list 数据类型概述

List 列表是简单的字符串列表,按照插入顺序排序,可以从头部或尾部向 List 列表添加元素。

2、list 数据类型常用类型

1、lpush(设置,创建):在头部(左侧left)依次插入列表元素

  1. 127.0.0.1:6379> lpush ceshi a b c d e
  2. (integer) 5

2、lpushx(相当于插入,从左侧插入):键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

  1. 127.0.0.1:6379> lpushx ceshi01 g ## 从左侧插入g
  2. (integer) 4
  3. 127.0.0.1:6379> lrange ceshi01 0 -1 ## 取链表中的全部元素,其中0表示第一个元素,-1表示最后一
  4. ## 一个元素
  5. 1) "g"
  6. 2) "h"
  7. 3) "f"
  8. 4) "e"
  9. 127.0.0.1:6379> rpushx ceshi01 a ## 从右侧添加元素
  10. (integer) 5
  11. 127.0.0.1:6379> lrange ceshi01 0 -1 ## 显示所有元素
  12. 1) "g"
  13. 2) "h"
  14. 3) "f"
  15. 4) "e"
  16. 5) "a"

3、lrange(获取,以下标索引的方式获取) :取从位置索引start到位置索引stop的所有元素(索引以0开始)

  1. 127.0.0.1:6379> lrange ceshi01 0 -1 ## 显示所有元素
  2. 1) "g"
  3. 2) "h"
  4. 3) "f"
  5. 4) "e"
  6. 5) "a"
  7. 127.0.0.1:6379> lrange ceshi01 0 0 ## 获取该键的List Value的头部元素
  8. 1) "g"

4、lpop :移除并返回mykey键的第一个元素,即从右往左第一个

  1. 127.0.0.1:6379> lpush mykey a b c d
  2. (integer) 4
  3. 127.0.0.1:6379> lrange mykey 0 -1
  4. 1) "d"
  5. 2) "c"
  6. 3) "b"
  7. 4) "a"
  8. 127.0.0.1:6379> lpop mykey ##移除并返回mykey键的第一个元素
  9. "d"
  10. 127.0.0.1:6379> lrange mykey 0 -1
  11. 1) "c"
  12. 2) "b"
  13. 3) "a"
  14. 127.0.0.1:6379> llen mykey ## 获取表中元素数量,在执行lpop命令两次后,链表头部的两
  15. ## 个元素已经被弹出,此时链表中元素的数量是3
  16. (integer) 3

5、lrem:从头部开始删除count个值为value的元素,并返回实际删除数量

6、lset:将位置索引为index的元素设置新值value

7、lindex:获取索引为index的元素

8、ltrim:仅保留从位置索引start到索引stop的元素

  1. 127.0.0.1:6379> lpush ceshi a b c d a c
  2. (integer) 6
  3. 127.0.0.1:6379> lrem ceshi 1 a ### 从头部(left)向尾部(right)变量链表,删除1个值等于a的元
  4. ### 素,返回值为实际删除的数量
  5. (integer) 1
  6. 127.0.0.1:6379> lrange ceshi 0 -1 ## 查看删除后结果,从索引从0到所有开始
  7. 1) "c"
  8. 2) "d"
  9. 3) "c"
  10. 4) "b"
  11. 5) "a"
  12. 127.0.0.1:6379> lrem ceshi 2 c ##删除2个值等于c的元素,返回值为实际删除的数量
  13. (integer) 2
  14. 127.0.0.1:6379> lrange ceshi 0 -1
  15. 1) "d"
  16. 2) "b"
  17. 3) "a"
  18. 127.0.0.1:6379> lindex ceshi 1 ## 显示索引下标为1的元素
  19. "b"
  20. 127.0.0.1:6379> lindex ceshi 2
  21. "a"
  22. 127.0.0.1:6379> ltrim ceshi 0 1 # 仅保留索引值0到1之间的2个元素,注意第0个和第1个元素均被保留
  23. OK
  24. 127.0.0.1:6379> lrange ceshi 0 -1
  25. 1) "d"
  26. 2) "b"

9、linsert :插入元素(利用before、after在指定元素前后插入)

  1. 127.0.0.1:6379> lpush ceshi a b c d e
  2. (integer) 5
  3. 127.0.0.1:6379> linsert ceshi before b b1
  4. (integer) 6
  5. 127.0.0.1:6379> lrange ceshi 0 -1
  6. 1) "e"
  7. 2) "d"
  8. 3) "c"
  9. 4) "b1"
  10. 5) "b"
  11. 6) "a"
  12. 127.0.0.1:6379> linsert ceshi after b b2
  13. (integer) 7
  14. 127.0.0.1:6379> lrange ceshi 0 -1
  15. 1) "e"
  16. 2) "d"
  17. 3) "c"
  18. 4) "b1"
  19. 5) "b"
  20. 6) "b2"
  21. 7) "a"

10、rpush : 在列表的尾部依次插入value

11、rpushx :key必须存在才可执行,将value从尾部插入,并返回所有元素数量

12、rpop:在尾部弹出(移除)一个元素,并返回该元素

13、rpoplpush :在key1的尾部弹出一个元素并返回,将它插入key2的头部

  1. 127.0.0.1:6379> rpush ceshi2 a b c d ## 从链表的尾部插入参数中给出的values,插入
  2. ## 顺序是从右到左依次插入
  3. (integer) 4
  4. 127.0.0.1:6379> lrange ceshi2 0 -1 ## 显示所有元素,从索引0开始
  5. 1) "a"
  6. 2) "b"
  7. 3) "c"
  8. 4) "d"
  9. 127.0.0.1:6379> lindex ceshi2 0 ## 显示索引值为0的元素值
  10. "a"
  11. 127.0.0.1:6379> rpush ceshi2 e
  12. (integer) 5
  13. 127.0.0.1:6379> lrange ceshi 0 -1
  14. 1) "e"
  15. 2) "d"
  16. 3) "c"
  17. 4) "b1"
  18. 5) "b"
  19. 6) "b2"
  20. 7) "a"
  21. 127.0.0.1:6379> lrange ceshi2 0 -1
  22. 1) "a"
  23. 2) "b"
  24. 3) "c"
  25. 4) "d"
  26. 5) "e"
  27. 127.0.0.1:6379> rpop ceshi
  28. "a"
  29. 127.0.0.1:6379> rpoplpush ceshi2 ceshi
  30. "e"
  31. 127.0.0.1:6379> lrange ceshi2 0 -1
  32. 1) "a"
  33. 2) "b"
  34. 3) "c"
  35. 4) "d"
  36. 127.0.0.1:6379> lrange ceshi 0 -1
  37. 1) "e"
  38. 2) "e"
  39. 3) "d"
  40. 4) "c"
  41. 5) "b1"
  42. 6) "b"
  43. 7) "b2"

三、Hash数据类型 (散列类型)

1、Hash数据类型概述

hash是一个键值对(key - value)集合,用于存储对象。可以采用这样的命名方式(hash格式):对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
如:存储ID为2的汽车对象。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

2、Hash数据类型常用命令

1、hset :给键值为myhash的键设置字段为##,值为##

2、hget:获取键值为##,字段为##的值

3、hdel:删除##键中字段名为##的字段

4、hexists:判断##键中是否存在##字段

5、hlen:命令获取##键的字段数量

6、hsetnx:通过hsetnx命令给##添加新字段##,其值为##,因为该字段已经被删除,所以该命令添加成功并返回1

  1. 127.0.0.1:6379> hset myhash field1 "zhangsan" ## 设置键myhash 字段为field1,值为zhangsan
  2. (integer) 1
  3. 127.0.0.1:6379> hget myhash field1 ## 获取myhash 的字段field1的值
  4. "zhangsan"
  5. 127.0.0.1:6379> hget myhash field2 ## 获取myhash 的字段field2的值,提示为不存在
  6. (nil)
  7. 127.0.0.1:6379> hset myhash field2 "san" ## 设置键myhash,字段field2的值
  8. (integer) 1
  9. 127.0.0.1:6379> hlen myhash ## 显示myhash 的字段数量
  10. (integer) 2
  11. 127.0.0.1:6379> hexists myhash field1 ## 查看myhash字段field1是否存在
  12. (integer) 1
  13. 127.0.0.1:6379> hdel myhash field1 ## 删除myhash字段field1
  14. (integer) 1
  15. 127.0.0.1:6379> hdel myhash field1 ## myhash字段field1,显示不成功,之前已删除
  16. (integer) 0
  17. 127.0.0.1:6379> hexists myhash field1 ## 查看myhash字段field1是否存在,返回码为0,表示不存在
  18. (integer) 0
  19. 127.0.0.1:6379> hsetnx myhash field1 "zhang" ## 检测myhash是否存在field1,返回值为1,表示不存
  20. ## 在且已创建
  21. (integer) 1
  22. 127.0.0.1:6379> hsetnx myhash field1 "zhang" ## 返回值为0,表示才存在,命令不执行
  23. (integer) 0

7、hincrby:给键的字段的值加1

8、hgetall:获取键的所有字段及其值

9、hkeys:获取键中所有字段的名字

10、hvals:获取键中所有字段的值

11、 hmset:批量设置键的字段值

12、hmget:批量获取键的字段值

  1. 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
  2. ## 为键myhash,一次性设置多个字段,分别是field1="hello",field2="world"
  3. OK
  4. 127.0.0.1:6379> hmget myhash field1 field2 ##获取myhash键的多个字段
  5. 1) "hello"
  6. 2) "world"
  7. 127.0.0.1:6379> hgetall myhash ##获取myhash键的所有字段
  8. 1) "field1"
  9. 2) "hello"
  10. 3) "field2"
  11. 4) "world"
  12. 127.0.0.1:6379> hkeys myhash ##获取myhash键中所有字段的名字
  13. 1) "field1"
  14. 2) "field2"
  15. 127.0.0.1:6379> hvals myhash ## 获取myhash键中所有字段的值
  16. 1) "hello"
  17. 2) "world"

四、set数据类型(无序集合)

1、set数据类型概念

无序集合,元素类型为string类型,元素具有唯一性, 不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算。

2、set数据类型常用命令

1、sadd:插入测试数据

  1. 127.0.0.1:6379> sadd myset a b c
  2. (integer) 3

2、smembers:查看插入的结果是否存在

  1. 127.0.0.1:6379> smembers myset
  2. 1) "e"
  3. 2) "a"
  4. 3) "c"
  5. 4) "b"
  6. 5) "d"

3、scard:获取Set集合中元素的数量

  1. 127.0.0.1:6379> scard myset
  2. (integer) 5

4、sismember:判断f是否已经存在,返回值为0表示不存在

  1. 127.0.0.1:6379> sismember myset a ## 查看a是否存在,返回值为1,表示存在
  2. (integer) 1
  3. 127.0.0.1:6379> sismember myset f ## 查看f是否存在,返回值为0,表示不存在
  4. (integer) 0

5、spop:随机的移除并返回set中的某一成员

  1. 127.0.0.1:6379> spop myset ## 随机移除一员
  2. "b"
  3. 127.0.0.1:6379> scard myset ## 查看元素数量
  4. (integer) 4
  5. 127.0.0.1:6379> smembers myset ## 查看移除后的myset信息
  6. 1) "e"
  7. 2) "a"
  8. 3) "c"
  9. 4) "d"

6、srem:移除指定元素

  1. 127.0.0.1:6379> smembers myset ##查看set中成员的位置
  2. 1) "e"
  3. 2) "a"
  4. 3) "c"
  5. 4) "d"
  6. 127.0.0.1:6379> srem myset e d f ## 移除e d f,由于f不存在,则只生效2个。
  7. (integer) 2
  8. 127.0.0.1:6379> smembers myset
  9. 1) "a"
  10. 2) "c"

7、srandmember:随机返回集合中的某一员

  1. 127.0.0.1:6379> srandmember myset
  2. "a"
  3. 127.0.0.1:6379> srandmember myset
  4. "e"

8、smove

  1. 127.0.0.1:6379> smove myset no a ##把a从myset移到no
  2. (integer) 1
  3. 127.0.0.1:6379> smembers myset
  4. 1) "c"
  5. 127.0.0.1:6379> smembers no
  6. 1) "b"
  7. 2) "c"
  8. 3) "a"

五、Sorted Set数据类型 (zset、有序集合)

1、Sorted Set数据类型概述

有序集合,元素类型为Sting,元素具有唯一性, 不能重复。每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

2、Sorted Set数据类型常用命令

1、zadd :添加成员

  1. 127.0.0.1:6379> zadd myzset 1 "one" ## 添加
  2. (integer) 1
  3. 127.0.0.1:6379>
  4. 127.0.0.1:6379> zadd myzset 2 "two" 3 "three"
  5. (integer) 2

2、zcard:获取成员数量

  1. 127.0.0.1:6379> zcard myzset
  2. (integer) 3

3、zcount:zcount key min max,分数满足表达式1 <= score <= 2的成员的数量

  1. 127.0.0.1:6379> zcount myzset 1 2
  2. (integer) 2

4、zrem:删除指定成员

  1. 127.0.0.1:6379> zrem myzset one two
  2. (integer) 2

5、zincreby:将成员one的分数增加-1,并返回该成员更新后的分数

  1. 127.0.0.1:6379> zincrby myzset -1 one
  2. "-1"

6、zscore:获取成员的分数

  1. 127.0.0.1:6379> zscore myzset one ## 获取成员one的分数
  2. "-1"

7、zrange

  1. 127.0.0.1:6379> zrange myzset 0 -1 withscores ##查询成员及分数
  2. 1) "one"
  3. 2) "-1"
  4. 3) "three"
  5. 4) "3"

8、zrank:获取成员的索引值

  1. 127.0.0.1:6379> zrank myzset three
  2. (integer) 1

发表评论

表情:
评论列表 (有 0 条评论,165人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis数据类型

    redis开创bai了一种新的数据存储思路,使用redis,我们不du用在面对功能单调的数据库时,把zhi精力放在如何把dao大象放进冰箱这样的问题上,而是利用redis灵活多

    相关 Redis数据类型介绍

    概述 Redis的键值可以使用五种数据类型:字符串,散列表,列表,集合,有序集合。本文详细介绍这五种数据类型的使用方法。本文命令介绍部分只是列举了基本的命令,至于具体的使

    相关 Redis数据类型

    数据类型 包括五种String、List、Hash、Set、Zset String 字符串是二进制安全的,可以包含任何数据 比如,图片或者序列化的对象 一个字

    相关 Redis数据类型

    1、String:key-value  redis命令不区分大小写,但是key区分的 redis中的数据都是字符串。 redis是单线程,(不适合存储比较大的数据)