ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Redis高手修炼之路】②Redis的五大数据类型 [打印本页]

作者: 农妇山泉一亩田    时间: 2022-6-24 20:11
标题: 【Redis高手修炼之路】②Redis的五大数据类型


目录



1.字符串

   字符串是Redis最基础的数据类型:
  
  1.1 常用命令:

1.1.1 添加、查询、获取长度、字符串的追加

set key value设置指定 key 的值
get key获取指定 key 的值
getrange key start end返回 key 中字符串值的子字符
setrange key offset value用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
strlen key返回 key 所储存的字符串值的长度
append key value如果 key 已经存在并且是一个字符串,将 value 追加到 key 原来的值的末尾
  1. 127.0.0.1:6379> set name tom
  2. OK
  3. 127.0.0.1:6379> get name
  4. "tom"
  5. #当值为字符串时要加双引号,或者之间加逗号隔开,空格代表命令结束
  6. 127.0.0.1:6379> set address "bei jing"
  7. OK
  8. 127.0.0.1:6379> set hobby basketball,football
  9. OK
  10. 127.0.0.1:6379> get address
  11. "bei jing"
  12. 127.0.0.1:6379> get hobby
  13. "basketball,football"
  14. 127.0.0.1:6379> append hobby "music"  #追加字符串
  15. (integer) 24
  16. 127.0.0.1:6379> get hobby
  17. "basketball,footballmusic"
  18. 127.0.0.1:6379> getrange address 0 2 #截取字符串,下标从0开始
  19. "bei"
  20. 127.0.0.1:6379> strlen address
  21. (integer) 8
复制代码
1.1.2 批量插入和查询

mset key value [key value ...]同时设置一个或多个 键值对
mget key1 [key2...]获取一个或多个给定key的值
msetnx key value [key value ...]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
  1. 127.0.0.1:6379> mset a 1 b 2 c 3
  2. OK
  3. 127.0.0.1:6379> mget a b c
  4. 1) "1"
  5. 2) "2"
  6. 3) "3"
  7. 127.0.0.1:6379> msetnx weight "170" height "100"
  8. (integer) 1
  9. 127.0.0.1:6379> mget weight height
  10. 1) "170"
  11. 2) "100"
复制代码
1.1.3 设置key值的生存时间

setex key seconds value设置key-value ,并设置key的生存时间(秒)
psetex key milliseconds value设置key-value ,并设置key的生存时间(毫秒)
setnx key value在 key 不存在时设置 key 的值
  1. 127.0.0.1:6379> setex id 10 "1001"
  2. OK
  3. 127.0.0.1:6379> get id
  4. "1001"
  5. 127.0.0.1:6379> get id  #10s之后就过期了
  6. (nil)
  7. 127.0.0.1:6379> psetex key 10000 abc
  8. OK
  9. 127.0.0.1:6379> get key
  10. "abc"
  11. 127.0.0.1:6379> get key
  12. (nil)
  13. 127.0.0.1:6379> setnx id "1002"
  14. (integer) 1
  15. 127.0.0.1:6379> get id
  16. "1002"
复制代码
1.1.4 key值的自增和自减

incr key key值自动增一
decr key key值自动减一
incrby key increment将 key 所储存的值加上给定的增量值(increment)
incrbyfloat key increment将 key 所储存的值加上给定的浮点增量值(increment)
decrby key decrementkey所储存的值减去给定的减量值(decrement)
  1. 127.0.0.1:6379> set age "15"
  2. OK
  3. 127.0.0.1:6379> get age
  4. "15"
  5. 127.0.0.1:6379> incr age
  6. (integer) 16
  7. 127.0.0.1:6379> incrby age 5
  8. (integer) 21
  9. 127.0.0.1:6379> decr age
  10. (integer) 20
  11. 127.0.0.1:6379> decrby age 5
  12. (integer) 15
  13. 127.0.0.1:6379> incrbyfloat age 1.5
  14. "16.5"
复制代码
1.2 使用场景


2.哈希

   Redis的键所对应的值本身又是一个键值对结构
  
与关系型数据库的区别:
1.关系型数据库是结构化的,若添加新的列,会影响到所有的行,而哈希类型是稀疏的,每个键可以有不同的哈希数据;
2.关系型数据库则可以支持复杂的关系查询
2.1 常用命令

2.1.1 添加、查询、删除、获取长度以及是否存在

hset key field value将哈希表 key 中的字段 field 的值设为 value
hget key field获取存储在哈希表中指定字段的值/td>
hdel key field2 [field2]删除一个或多个哈希表字段
hkeys key获取所有哈希表中的字段
hvals key获取哈希表中所有值
hgetall key获取在哈希表中指定 key 的所有字段和值
hlen key获取哈希表中字段的数量
hexists key field查看哈希表 key 中,指定的字段是否存在
  1. 127.0.0.1:6379> hset user name tom age "18"
  2. (integer) 2
  3. 127.0.0.1:6379> hget user name
  4. "tom"
  5. 127.0.0.1:6379> hgetall user
  6. 1) "name"
  7. 2) "tom"
  8. 3) "age"
  9. 4) "18"
  10. 127.0.0.1:6379> hdel user age
  11. (integer) 1
  12. 127.0.0.1:6379> hgetall user
  13. 1) "name"
  14. 2) "tom"
  15. 127.0.0.1:6379> hkeys user
  16. 1) "name"
  17. 127.0.0.1:6379> hlen user
  18. (integer) 1
  19. 127.0.0.1:6379> hexists user name
  20. (integer) 1
  21. 127.0.0.1:6379> hexists user age
  22. (integer) 0
  23. 127.0.0.1:6379> hvals user
  24. 1) "tom"
复制代码
2.1.2 key值的增加

hincrby key field increment为哈希表 key 中的指定字段的整数值加上增量 increment
hincrbyfloat key field increment为哈希表 key 中的指定字段的浮点数值加上增量 increment
  1. 127.0.0.1:6379> hset user score "85"
  2. (integer) 1
  3. 127.0.0.1:6379> hincrby user score 5
  4. (integer) 90
  5. 127.0.0.1:6379> hincrbyfloat user score 1.5
  6. "91.5"
复制代码
2.1.3 批量添加字段

hsetnx key field value在字段 field 不存在时,设置哈希表字段的值
hmget key field1 [field2]获取所有给定字段的值
hmset key field1 value1 [field2 value2]同时将多个域值对设置到哈希表中
  1. 127.0.0.1:6379> hsetnx user grade 3
  2. (integer) 1
  3. 127.0.0.1:6379> hmget user name age grade
  4. 1) "tom"
  5. 2) "20"
  6. 3) "3"
  7. 127.0.0.1:6379> hmset user gender M class 1
  8. OK
  9. 127.0.0.1:6379> hgetall user
  10. 1) "name"
  11. 2) "tom"
  12. 3) "age"
  13. 4) "20"
  14. 5) "score"
  15. 6) "91.5"
  16. 7) "grade"
  17. 8) "3"
  18. 9) "gender"
  19. 10) "M"
  20. 11) "class"
  21. 12) "1"
复制代码
2.2 三种存储方式的区别


3.列表

   1.列表是线性有序的数据结构;
2.列表中的元素是可以重复的;
3.—个列表最多能存储232-1个元素。
  3.1 常用命令

3.1.1 列表的插入、移除及查询

lpush key value1 [value2]将一个或多个值插入到列表头部(左插入)
rpush key value1 [value2]在列表尾部添加一个或多个值(右插入)
rpop key移除并输出列表最后一个元素
lpop key移出并输出列表的第一个元素
llen key获取列表长度
lindex key index 通过索引获取列表中的元素
lrange key start stop获取列表指定范围内的元素
  1. 127.0.0.1:6379> lpush list 3 2 1
  2. (integer) 3
  3. 127.0.0.1:6379> rpush list 4 5 6
  4. (integer) 6
  5. 127.0.0.1:6379> lrange list 0 -1 # 相当于lrange list 0 5 ,-1表示末尾
  6. 1) "1"
  7. 2) "2"
  8. 3) "3"
  9. 4) "4"
  10. 5) "5"
  11. 6) "6"
  12. 127.0.0.1:6379> rpop list
  13. "6"
  14. 127.0.0.1:6379> lpop list
  15. "1"
  16. 127.0.0.1:6379> llen list
  17. (integer) 4
  18. 127.0.0.1:6379> lindex list 3
  19. "5"
复制代码
3.1.2 对已有列表进行更新、截取元素

lrem key count value根据value移除指定数量的值
lset key index value通过索引更新元素
linsert key before|after pivot value在列表的元素前或者后插入元素
lpushx key value 将一个或多个值插入到已存在的列表头部
rpushx key value将一个或多个值插入到已存在的列表尾部
ltrim key start stop裁剪列表元素,只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
rpoplpush source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回
  1. 127.0.0.1:6379> lpush mylist a 1 a 2 b 3 b 4 c 5 a 6
  2. (integer) 12
  3. 127.0.0.1:6379> lrem mylist 2 a   #删除前两个a
  4. (integer) 2
  5. 127.0.0.1:6379> lrange mylist 0 -1
  6. 1) "6"
  7. 2) "5"
  8. 3) "c"
  9. 4) "4"
  10. 5) "b"
  11. 6) "3"
  12. 7) "b"
  13. 8) "2"
  14. 9) "1"
  15. 10) "a"
  16. 127.0.0.1:6379> lset mylist 1 12
  17. OK
  18. 127.0.0.1:6379> linsert mylist before 3 111   #在3前面插入111
  19. (integer) 11
  20. 127.0.0.1:6379> lrange mylist 0 -1
  21. 1) "6"
  22. 2) "12"
  23. 3) "c"
  24. 4) "4"
  25. 5) "b"
  26. 6) "111"
  27. 7) "3"
  28. 8) "b"
  29. 9) "2"
  30. 10) "1"
  31. 11) "a"
  32. 127.0.0.1:6379> lpushx mylist aaa
  33. (integer) 12
  34. 127.0.0.1:6379> rpushx mylist bbb
  35. (integer) 13
  36. 127.0.0.1:6379> lrange mylist 0 -1
  37. 1) "aaa"
  38. 2) "6"
  39. 3) "12"
  40. 4) "c"
  41. 5) "4"
  42. 6) "b"
  43. 7) "111"
  44. 8) "3"
  45. 9) "b"
  46. 10) "2"
  47. 11) "1"
  48. 12) "a"
  49. 13) "bbb"
  50. 127.0.0.1:6379> ltrim mylist 0 5
  51. OK
  52. 127.0.0.1:6379> lrange mylist 0 -1
  53. 1) "aaa"
  54. 2) "6"
  55. 3) "12"
  56. 4) "c"
  57. 5) "4"
  58. 6) "b"
  59. 127.0.0.1:6379> rpoplpush mylist newlist
  60. "b"
复制代码
3.2 使用场景


4.集合

   1.集合中的元素是无序、不可重复的,一个集合最多能存储232-1个元素;
2.集合除了支持对元素的增删改查之外,还支持对多个集合取交集、并集、差集。
  4.1 常用命令

4.1.1 添加、删除

sadd key member1 member2向集合中添加一个或多个成员
scard key获取集合成员数
spop key移除并返回集合中的一个随机元素
smembers key返回集合中的所有成员
sismember key member判断member是否是集合key的成员
srem key member1 member2移除集合中的一个或多个成员
smove source destination member将 member 元素从 source 集合移动到 destination 集合
  1. 127.0.0.1:6379> sadd myset1 a b c d e f
  2. (integer) 6
  3. 127.0.0.1:6379> sadd myset2 d e f g h i
  4. (integer) 6
  5. 127.0.0.1:6379> scard myset1
  6. (integer) 6
  7. 127.0.0.1:6379> smembers myset1
  8. 1) "b"
  9. 2) "a"
  10. 3) "c"
  11. 4) "f"
  12. 5) "d"
  13. 6) "e"
  14. 127.0.0.1:6379> spop myset1 2  # 随机移除2个成员
  15. 1) "e"
  16. 2) "b"
  17. 127.0.0.1:6379> sismember myset1 c   #查询集合中是否存在c
  18. (integer) 1
  19. 127.0.0.1:6379> srem myset1 f #将集合中的f移除
  20. (integer) 1
  21. 127.0.0.1:6379> smove myset1 newset a  #将a从集合myset1移动到newset
  22. (integer) 1
  23. 127.0.0.1:6379> smembers newset
  24. 1) "a"
复制代码
4.1.2 交集、并集、差集

sinter key1 key2返回给定的集合的交集
sunion key1 key2返回给定的集合的并集
sdiff key1 key2返回给定的集合的差集
sinterstore destination key1 key2返回给定的集合的交集并存到destination中
sunionstore destination key1 key2返回给定的集合的并集并存到destination中
sdiffstore destination key1 key2返回给定的集合的差集并存到destination中
  1. 127.0.0.1:6379> sinter myset1 myset2
  2. 1) "d"
  3. 2) "e"
  4. 127.0.0.1:6379> sunion myset1 myset2
  5. 1) "d"
  6. 2) "e"
  7. 3) "a"
  8. 4) "c"
  9. 5) "g"
  10. 6) "h"
  11. 7) "f"
  12. 8) "b"
  13. 9) "i"
  14. 127.0.0.1:6379> sdiff myset1 myset2
  15. 1) "a"
  16. 2) "b"
  17. 3) "c"
  18. 127.0.0.1:6379> sinterstore newset1 myset1 myset2
  19. (integer) 2
  20. 127.0.0.1:6379> smembers newset1
  21. 1) "d"
  22. 2) "e"
  23. 127.0.0.1:6379> sunionstore newset2 myset1 myset2
  24. (integer) 9
  25. 127.0.0.1:6379> smembers newset2
  26. 1) "d"
  27. 2) "e"
  28. 3) "a"
  29. 4) "c"
  30. 5) "g"
  31. 6) "h"
  32. 7) "f"
  33. 8) "b"
  34. 9) "i"
  35. 127.0.0.1:6379> sdiffstore newset3 myset1 myset2
  36. (integer) 3
  37. 127.0.0.1:6379> smembers newset3
  38. 1) "a"
  39. 2) "b"
  40. 3) "c"
复制代码
4.1.3 随机数

srandmember key count随机返回集合中的一个或多个元素
  1. 127.0.0.1:6379> srandmember myset1 2 #随机返回两个元素
  2. 1) "b"
  3. 2) "a"
  4. 127.0.0.1:6379> srandmember myset1
  5. "a"
  6. 127.0.0.1:6379> srandmember myset1
  7. "d"
复制代码
4.2 使用场景


5.有序集合

   1.有序集合保留了集合元素不能重复的特点;
2.有序集合会给每个元素设置一个分数,并以此作为排序的依据;
3.有序集合不能包含相同的元素,但是不同元素的分数可以相同。
  5.1 常用命令

5.1.1 添加、查询

zadd key score1 member1 score2 member2向有序集合添加一个或多个成员,或者更新已存在成员的分数
zrange key start stop [WITHSCORES]通过索引区间返回有序集合成指定区间内的成员
zrangebyscore key min max [WITHSCORES] [LIMIT]通过分数返回有序集合指定区间内的成员
zcount key min max计算在有序集合中指定区间分数的成员数
  1. 127.0.0.1:6379> zadd scores 70 tom
  2. (integer) 1
  3. 127.0.0.1:6379> zadd scores 80 lucy 85 lily
  4. (integer) 2
  5. 127.0.0.1:6379> zrange scores 0 -1
  6. 1) "tom"
  7. 2) "lucy"
  8. 3) "lily"
  9. 127.0.0.1:6379> zrange scores 0 -1 withscores
  10. 1) "tom"
  11. 2) "70"
  12. 3) "lucy"
  13. 4) "80"
  14. 5) "lily"
  15. 6) "85"
  16. 127.0.0.1:6379> zrangebyscore scores 70 85 withscores
  17. 1) "tom"
  18. 2) "70"
  19. 3) "lucy"
  20. 4) "80"
  21. 5) "lily"
  22. 6) "85"
  23. 127.0.0.1:6379> zrangebyscore scores -inf 80 withscores  #负无穷到80
  24. 1) "tom"
  25. 2) "70"
  26. 3) "lucy"
  27. 4) "80"
  28. 127.0.0.1:6379> zrangebyscore scores 80 +inf withscores  #80到正无穷
  29. 1) "lucy"
  30. 2) "80"
  31. 3) "lily"
  32. 4) "85"
  33. 127.0.0.1:6379> zcount scores 70 80
  34. (integer) 2
复制代码
5.1.2 排序、成员值的更新

zrevrange key start stop [WITHSCORES]返回有序集中指定区间内的成员,由大到小
zrevrangebyscore key max min [WITHSCORES]返回有序集中指定分数区间内的成员,分数由大到小
zrank key member返回有序集合中指定成员的索引
zscore key member返回有序集中,成员的分数值
zincrby key increment member有序集合中对指定成员的分数加上增量 increment
zcard key获取有序集合的成员数
zrem key member [member...]移除有序集合中的一个或多个成员
  1. 127.0.0.1:6379> zrevrange scores 0 -1 withscores
  2. 1) "jery"
  3. 2) "90"
  4. 3) "dady"
  5. 4) "88"
  6. 5) "lily"
  7. 6) "85"
  8. 7) "lucy"
  9. 8) "80"
  10. 9) "tom"
  11. 10) "70"
  12. 127.0.0.1:6379> zrevrangebyscore scores 88 80
  13. 1) "dady"
  14. 2) "lily"
  15. 3) "lucy"
  16. 127.0.0.1:6379> zrank scores tom
  17. (integer) 0
  18. 127.0.0.1:6379> zscore scores lucy
  19. "80"
  20. 127.0.0.1:6379> zincrby scores 5 lucy
  21. "85"
  22. 127.0.0.1:6379> zcard scores
  23. (integer) 5
  24. 127.0.0.1:6379> zrem scores jery
  25. (integer) 1
复制代码
5.1.3 交集

zunionstore destination numkeys key [key ...]计算给定的一个或多个有序集的并集,并将结果存储在新的 key 中
  1. 127.0.0.1:6379> zunionstore newscores 2 scores scores1 aggregate max
  2. (integer) 5
  3. 127.0.0.1:6379> zrange newscores 0 -1 withscores
  4. 1) "das"
  5. 2) "56"
  6. 3) "tom"
  7. 4) "70"
  8. 5) "lily"
  9. 6) "85"
  10. 7) "lucy"
  11. 8) "85"
  12. 9) "dady"
  13. 10) "88"
复制代码
5.2 使用场景



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4