当前位置:   article > 正文

Redis常用命令_redis命令

redis命令

1.String类型

MSET :批量添加多个String类型键值对

MGET:批量获取多个String类型键值对

  1. 127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
  2. OK
  3. 127.0.0.1:6379> MGET k1 k2 k3
  4. 1) "v1"
  5. 2) "v2"
  6. 3) "v3"
  7. 127.0.0.1:6379>

INCR:让一个整型的key自增1

  1. 127.0.0.1:6379> set k4 18
  2. OK
  3. 127.0.0.1:6379> get k4
  4. "18"
  5. 127.0.0.1:6379> incr k4
  6. (integer) 19
  7. 127.0.0.1:6379> get k4
  8. "19"
  9. 127.0.0.1:6379> incr k4
  10. (integer) 20
  11. 127.0.0.1:6379> get k4
  12. "20"
  13. 127.0.0.1:6379>

INCRBY :指定整型的key自增,并且指定步长,也即增加多少

  1. 127.0.0.1:6379> get k4
  2. "20"
  3. 127.0.0.1:6379> INCRBY k4 3
  4. (integer) 23
  5. 127.0.0.1:6379> get k4
  6. "23"

指定步长为负数时,就自减了

  1. 127.0.0.1:6379> INCRBY k4 -3
  2. (integer) 20

专用自减命令:DECR  

  1. 127.0.0.1:6379> DECR k4
  2. (integer) 19
  3. 127.0.0.1:6379> DECRBY k4 3
  4. (integer) 16

INCRBYFLOAT :指定浮点型的key自增,并且指定步长,也即增加多少

  1. 127.0.0.1:6379> set key 24.1
  2. OK
  3. 127.0.0.1:6379> INCRBYFLOAT key 0.5
  4. "24.6"
  5. 127.0.0.1:6379> get key
  6. "24.6"

SETNX :添加一个String类型的键值对,key必须不存在,存在了不执行

  1. 127.0.0.1:6379> SETNX k5 hello
  2. (integer) 1
  3. 127.0.0.1:6379> SETNX k4 hello
  4. (integer) 0

SETEX:是SET和EXPIRE的组合命令。

添加一个String类型的键值对,并且指定有效期

  1. 127.0.0.1:6379> SETEX k6 5 hellokey5
  2. OK
  3. 127.0.0.1:6379> TTL k6
  4. (integer) 2
  5. 127.0.0.1:6379> TTl k6
  6. (integer) -2
  7. 127.0.0.1:6379> TTL k6
  8. (integer) -2

Redis中没有表的概念 , 将key设置为多个层级结构,多个单词之间使用:隔开

一般格式:【项目名称】:【业务名称】:【类型】:【id】

例如:work:user:1   work:product:1

如果value是一个Java对象,可以将对象序列化为json字符串后存储

  1. {
  2. "id": 1,
  3. "username": "john_doe",
  4. "email": "john@example.com",
  5. "age": 30,
  6. "address": {
  7. "street": "123 Main Street",
  8. "city": "New York",
  9. "country": "USA"
  10. },
  11. "tags": ["java", "programming", "json"]
  12. }

 可通过key获取json格式的value;避免了id相同的冲突

  1. 127.0.0.1:6379> set student:info:2 '{"id":2,"name":"李四","age":17,"gender":"女"}'
  2. 127.0.0.1:6379> set student:info:3 '{"id":3,"name":"王五","age":20,"gender":"男"}'
  3. OK
  4. 127.0.0.1:6379> get student:info:1
  5. "{\"id\":1,\"name\":\"\xe5\xbc\xa0\xe4\xb8\x89\",\"age\":18,\"gender\":\"\xe7\x94\xb7\"}"
  6. 127.0.0.1:6379> get student:info:2
  7. "{\"id\":2,\"name\":\"\xe6\x9d\x8e\xe5\x9b\x9b\",\"age\":17,\"gender\":\"\xe5\xa5\xb3\"}"
  8. 127.0.0.1:6379> get student:info:3
  9. "{\"id\":3,\"name\":\"\xe7\x8e\x8b\xe4\xba\x94\",\"age\":20,\"gender\":\"\xe7\x94\xb7\"}"

 2.Hash类型

String存储字符串,单独对某个字段修改不方便

Hash结构可以将对象的每个字段单独存储,可针对单个字段CURD

 常见命令:

HSET  key field  value:添加或修改hash类型的key的field的值

HGET key field:获取一个hash类型的key的field的值

  1. 127.0.0.1:6379> HSET hset1 f1 v1
  2. (integer) 1
  3. 127.0.0.1:6379> HGET hset1 f1
  4. "v1"

还可对field的值进行修改

  1. 127.0.0.1:6379> HSET hset1 f1 v1alter
  2. (integer) 0
  3. 127.0.0.1:6379> HGET hset1 f1
  4. "v1alter"

一个key的field可以有多个

  1. 127.0.0.1:6379> HSET hset1 f2 v2
  2. (integer) 1
  3. 127.0.0.1:6379> HSET hset1 f3 v3
  4. (integer) 1
  5. 127.0.0.1:6379> HGET hset1 f1
  6. "v1alter"
  7. 127.0.0.1:6379> HGET hset1 f2
  8. "v2"
  9. 127.0.0.1:6379> HGET hset1 f3
  10. "v3"

HMSET:可以存多组field-value

HMGET:可以获取多个field的值

  1. 127.0.0.1:6379> HMSET hset2 f1 v1 f2 v1 f3 v3
  2. OK
  3. 127.0.0.1:6379> HMGET hset2 f1 f2 f3
  4. 1) "v1"
  5. 2) "v1"
  6. 3) "v3"

HGETALL:获取一个Hash类型的key中所有的field和value

  1. 127.0.0.1:6379> HGETALL hset2
  2. 1) "f1"
  3. 2) "v1"
  4. 3) "f2"
  5. 4) "v1"
  6. 5) "f3"
  7. 6) "v3"

KEYS:获取一个hash类型的key的所有field

  1. 127.0.0.1:6379> HKEYS hset2
  2. 1) "f1"
  3. 2) "f2"
  4. 3) "f3"

HVALS:获取所有的值

  1. 127.0.0.1:6379> HVALS hset2
  2. 1) "v1"
  3. 2) "v1"
  4. 3) "v3"

HINCRBY:让一个hash类型的key的字段值自增并且指定步长

  1. 127.0.0.1:6379> HSET hset3 5 5
  2. (integer) 1
  3. 127.0.0.1:6379> HINCRBY hset3 5 2
  4. (integer) 7
  5. 127.0.0.1:6379> hvals hset3
  6. 1) "7"

HSETNX:添加一个hash类型的key的field值,前提是field不存在,否则不执行

  1. 127.0.0.1:6379> HSETNX hset3 7 5
  2. (integer) 1
  3. 127.0.0.1:6379> HSETNX hset3 7 5
  4. (integer) 0
  5. 127.0.0.1:6379> hget hset3 7
  6. "5"

3.List命令

Redis中的list类型与Java中的LinkedList类似,可看作是双向链表结构,既可以支持正向检索,也支持反向检索

特征:有序、元素可重复插入、插入删除快、查询速度一般

LPUSH key element...:向列表左侧插入一个或多个元素

LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

PHUSH key element...:向列表右侧插入一个或多个元素

RPOP key:移除并返回列表右侧的第一个元素

LRANGE key star end:返回一段角标范围内的所有元素

BLPOP和BRPOP:与LPOP和RPOP相似,只不过在没有元素时指定等待时间,不直接返回nil

  1. 127.0.0.1:6379> LPUSH list1 hello world
  2. (integer) 2
  3. 127.0.0.1:6379> LPUSH list1 zhangsan lisi wangwu
  4. (integer) 5
  5. wangwu->lisi->zhangsan->world->hello
  6. 127.0.0.1:6379> LPOP list1
  7. "wangwu"
  8. 127.0.0.1:6379> RPUSH list1 zhaoliu
  9. (integer) 5
  10. lisi->zhangsan->world->hello->zhaoliu
  11. 127.0.0.1:6379> RPOP list1
  12. "zhaoliu"
  13. lisi->zhangsan->world->hello
  14. 127.0.0.1:6379> LRANGE list1 1 3
  15. 1) "zhangsan"
  16. 2) "world"
  17. 3) "hello"
  18. 127.0.0.1:6379> LPUSH list2 lisi
  19. (integer) 1
  20. 127.0.0.1:6379> Lpop list2
  21. "lisi"
  22. 出队列,指定时间,如果不存在,就会阻塞
  23. 127.0.0.1:6379> BLPop list2 3
  24. (nil)
  25. (3.08s)

模拟栈:入口出口在一起;先进后出(LPUSH+LPOP)

模拟队列:入口出口不在一起;先进先出(LPUSH+RPOP)

阻塞队列:满足队列(入口出口不在一起;先进先出)满足阻塞(出队列采用B L/R POP)

4.Set类型 

与hashset相似,可以看作是value为null的hashmap,因为也是一个hash表,具备hashset的特征

无序、元素不可重复、查找快、支持交集、并集、差集等功能

SADD key member...:添加一个或多个元素

SREM key member:移除set指定的元素

 SCARD key:返回set中的元素个数

SISMEMBER key member:判断一个元素是否在set中

SMEMBERS:获取set中的所有元素

SINTER key1 key2:求两个key的交集

SDIFF key1 key2:求差集(a中有的,b没有,这个元素就是a和b的差,多个差就是差集)

SUNION key1 key2:求并集,相同的元素只出现一次

  1. 127.0.0.1:6379> SADD set1 v1 v2 v3 v4 v5
  2. (integer) 5
  3. 127.0.0.1:6379> SREM set1 v1
  4. (integer) 1
  5. 127.0.0.1:6379> SCARD set1
  6. (integer) 4
  7. 127.0.0.1:6379> SISMEMBER set1 v1
  8. (integer) 0
  9. 127.0.0.1:6379> SISMEMBER set1 v2
  10. (integer) 1
  11. 127.0.0.1:6379> SMEMBERS set1
  12. 1) "v3"
  13. 2) "v5"
  14. 3) "v2"
  15. 4) "v4"
  16. //结果体现了set是无序的
  17. //求交集
  18. 127.0.0.1:6379> SADD set2 v1 v2 v3 v4
  19. (integer) 4
  20. 127.0.0.1:6379> SINTER set1 set2
  21. 1) "v3"
  22. 2) "v2"
  23. 3) "v4"
  24. //求差集
  25. 127.0.0.1:6379> SDIFF set1 set2
  26. 1) "v5"
  27. //求并集
  28. 127.0.0.1:6379> SUNION set1 set2
  29. 1) "v4"
  30. 2) "v3"
  31. 3) "v1"
  32. 4) "v5"
  33. 5) "v2"

5.SortedSet类型

是一个可排序的set集合,与Java的treeset类似。SortedSet中每个元素带有一个score属性,基于这个属性可以进行元素排序

可排序、元素不重复、查询速度快,可实现排行榜类似的功能

常用命令:

ZADD key score member:添加一个或多个元素到sortedset,如果存在则更新score值

ZREM key member :删除指定的元素

SCORE key member:获取指定元素的score值

ZRANK key member:获取指定元素的排名

ZCARD key: 获取元素个数

ZCOUNT key min max:统计score值在给定范围内的所有元素个数

ZINCRBY key increment member:让指定元素自增,步长为increment

ZRANGE key min max:按照score排序后,获取指定排名范围内的的元素

ZRANGEBYSCORE  key min max :按照score排序后,获取指定范围的元素

ZDIFF:求差集  ZINTER:求交集、ZUNION :求并集

  1. //插入student
  2. 127.0.0.1:6379> ZADD student 90 zs 80 li 87 ww 67 zl
  3. (integer) 4
  4. //移除zl
  5. 127.0.0.1:6379> ZREM student zl
  6. (integer) 1
  7. //查看score值
  8. 127.0.0.1:6379> ZSCORE student zs
  9. "90"
  10. 127.0.0.1:6379> ZSCORE student li
  11. "80"
  12. 127.0.0.1:6379> ZSCORE student ww
  13. "87"
  14. //获取指定元素排名
  15. 127.0.0.1:6379> ZRANk student li
  16. (integer) 0
  17. 127.0.0.1:6379> ZRANK student ww
  18. (integer) 1
  19. 127.0.0.1:6379> ZRANK student zs
  20. (integer) 2
  21. //查询总共有多少元素
  22. 127.0.0.1:6379> ZCARD student
  23. (integer) 3
  24. //查询指定范围的score有多少元素
  25. 127.0.0.1:6379> ZCOUNT student 80 98
  26. (integer) 3
  27. //指定元素为zs。自增步长为10。从90变为100
  28. 127.0.0.1:6379> ZINCRBY student 10 zs
  29. "100"
  30. //根据score排名后,在指定范围获取元素
  31. 127.0.0.1:6379> ZRANGE student 0 2
  32. 1) "li"
  33. 2) "ww"
  34. 3) "zs"
  35. 127.0.0.1:6379> ZRANGE student 0 1
  36. 1) "li"
  37. 2) "ww"
  38. 127.0.0.1:6379> ZRANGE student 0 0
  39. 1) "li"
  40. //根据score排名后,指定score范围获取元素
  41. 127.0.0.1:6379> ZRANGEBYSCORE student 80 110
  42. 1) "li"
  43. 2) "ww"
  44. 3) "zs"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/656533
推荐阅读
相关标签
  

闽ICP备14008679号