当前位置: 首页 > news >正文

Redis 常用数据类型和命令使用

目录

1 string    

2 hash

3 list

4 set集合

5 zset有序集合


1 string    


值可以是字符串、数字和二进制的value,值最大不能超过512MB

应用场景:
应用程序缓存
计数器
web共享session
限速


1.1 设置单个键值
set <key> value [EX seconds|PX milliseconds] [nx|xx]
ex seconds 为键值设置秒级过期时间
px milliseconds 为键值设置毫秒级过期时间
nx 键必须补存在,才可以设置成功,用于添加
xx 与nx相反,键必须存在,才可以设置成功,用于更新

示例:
设置key1值为value1,过期时间60秒,键存在才更新
127.0.0.1:6379>set key1 value1 ex 60  xx 


1.2 获取值
get key

示例:
127.0.0.1:6379> get key1
"value1"


1.3 计数
incr key,
值为整数返回自增后的结果
值不是整数返回错误
键不存在按照值为0自增返回结果1
其他命令:decr(自减),incrby(自增指定数字),decrby(自减指定数字)

示例:
127.0.0.1:6379> set counter 1
OK
127.0.0.1:6379> get counter
"1"

127.0.0.1:6379> incr counter
(integer) 2
127.0.0.1:6379> get counter
"2"

127.0.0.1:6379> decr counter
(integer) 1
127.0.0.1:6379> get counter
"1"

127.0.0.1:6379> incrby counter 10
(integer) 11
127.0.0.1:6379> get counter
"11"

127.0.0.1:6379> decrby counter 3
(integer) 8
127.0.0.1:6379> get counter
"8"

1.4 追加值
append <key> value    #追加到原值的末尾

实例:
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> append key2 "-key2"
(integer) 11
127.0.0.1:6379> get key2
"value2-key2"


1.5字符串长度
strlen <key> #获取值的长度

实例:
127.0.0.1:6379> strlen key2
(integer) 11

1.6 获取部分字符串
getrange <key> start end

实例:
127.0.0.1:6379> getrange key2 1 2
"al"

1.7 删除key
del <key>

实例:
127.0.0.1:6379> del key1
(integer) 1

1.8 批量设置值
mset <key> value [key value ...]

实例:
127.0.0.1:6379> mset a 1 b 2 c 3 d 4 e 5
OK

1.9 批量获取
mget <kye> [key ...]

实例:
127.0.0.1:6379> mget a b c d e
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

2 hash


是一个键值对集合

应用场景:
缓存对象,一个key里有多个字段,比如缓存用户登录信息。

2.1 设置值
hset <key> field value     #单个值
hmget <key> field [field ...]

实例:
127.0.0.1:6379> hset myhash name zyb
(integer) 1
127.0.0.1:6379> hmset myhash age 10 address gz
OK

2.2 查询
hget <key> field       #获取单个field的值
hmget <key> field [field ..]  #获取多个field的值

实例:
127.0.0.1:6379> hget myhash name
"zyb"
127.0.0.1:6379> hmget myhash age address
1) "10"
2) "gz"


hkeys <key>   #获取所有field

实例:
127.0.0.1:6379> hkeys myhash
1) "name"
2) "age"
3) "address"


hvals <key>   #获取所有value

实例:
127.0.0.1:6379> hvals myhash
1) "zyb"
2) "10"
3) "gz"

hgetall <key>  #获取所有的field-value

实例:
127.0.0.1:6379> hgetall myhash
1) "name"
2) "zyb"
3) "age"
4) "10"
5) "address"
6) "gz"


hlen <key> #计算field个数

实例:
127.0.0.1:6379> hlen myhash
(integer) 3


hexists <key> field  #判断field是否存在

实例:
127.0.0.1:6379> hexists myhash name
(integer) 1  
返回1表示该field存在

hstrlen <key> field   #计算value的字符串长度

实例:
127.0.0.1:6379> hstrlen myhash name
(integer) 3


2.3 删除field
hdel <key> field [field ...]

实例:
127.0.0.1:6379> hdel myhash address
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "name"
2) "zyb"
3) "age"
4) "10"


3 list


列表类型是用来存储多个有序字符串

应用场景:
消息队列: lpush+rpop=消息队列,生产和消费
文章列表
栈: lpush+lpop=stack
lpush+ltrim =Capped collection 有限集合

3.1 添加
#从左/右边插入元素
lpush <key> value [value ...]

实例:
127.0.0.1:6379> lpush mylist a b c d e f 
(integer) 6

#向某个元素前或后插入元素
linesert <key> before|after pivot value

示例: 在a元素之后插入aaa
127.0.0.1:6379> LINSERT mylist before a aaa
(integer) 7

#rpoplpush 移除列表key1的最后一个元素,并将该元素添加到另一个列表key2的左边并返回
rpoplpush <key1> <key2>


3.2 删除
#从列表左/右侧弹出元素
rpop/lpop key count

实例:
127.0.0.1:6379> lpop mylist
"f"

#删除指定元素
lrem key count value
count>0 从左到右删除最多count个元素
count<0 从右到左删除最多count绝对值个元素
count=0 删除所有

示例:
127.0.0.1:6379> lrem mylist 2 a
(integer) 2


#按照索引范围修剪列表
ltrim key start end      #只保留列表listkey第start个到end个元素

示例:
127.0.0.1:6379> LTRIM mylist 2 5
OK

3.3 查询
#获取指定范围内的元素列表
lrange key start end 

示例:
127.0.0.1:6379> LRANGE mylist 0 -1    #所有元素
1) "c"
2) "b"
3) "aaa"
4) "a"

#获取列表指定索引下标的元素
lindex key index

示例:
127.0.0.1:6379> LINDEX mylist 2
"aaa"

#获取列表长度
llen key

示例:
127.0.0.1:6379> LLEN mylist
(integer) 4

#修改指定索引下标的元素
lset key index newValue

示例:
127.0.0.1:6379> LSET mylist 2 python   #索引从0开始计算
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "python"
4) "a"

4 set集合

应用场景:
标签,给用户添加标签
独立ip
点赞
共同好友,利用set的交集

4.1 添加元素,返回结果为添加成功的元素个数
sadd key member [member ...]

示例:
127.0.0.1:6379> sadd myset a b c d
(integer) 4


4.2 删除元素,返回结果为成功删除元素个数
srem key memeber [member ...]

示例:
127.0.0.1:6379> SREM myset a
(integer) 1

4.3 计算元素个数
scard key

示例:
127.0.0.1:6379> SCARD myset
(integer) 3


4.4 判断元素是否在集合中
sismember key member

示例:
127.0.0.1:6379> SISMEMBER myset a
(integer) 0  #不存在
127.0.0.1:6379> SISMEMBER myset b
(integer) 1  #存在


4.5 随机从集合返回指定个数元素,不会删除
srandmember key [count]

4.6 随机从集合弹出元素删除
spop key [count]

4.7 获取所有元素
smembers key


4.8 求多个集合的交集
sinter key [key ...]

4.9 求多个集合的并集
suinon key [key ...]

4.10 求多个集合差集
sdiff key [key ...]

4.11 将交集、并集、差集的结果保存
sinterstore destination key [key ...] 
suionstore destination key [key ...] 
sdiffstore destination key [key ...] 


4.12 将集合中一个member移到另一个集合
SMOVE source destination member

实例:
127.0.0.1:6379> SMOVE myset myset2 b
(integer) 1
127.0.0.1:6379> SMEMBERS myset2
1) "b"


5 zset有序集合


应用场景:
排行榜
社交网络
队列

5.1 添加成员
zadd key score member [score member ...]
zincrby key increment member    #增加成员分数

示例:
127.0.0.1:6379> ZADD myzadd 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6

5.2 计算成员个数
zcard key

5.3 计算某个成员的分数
zscore key member

5.4 计算成员的排名
zrank key member  #分数从低到高返回排名
zrevrange key member #分数从高到低返回排名

5.5 返回指定排名范围成员
zrange key start end  #从低到高
zrevrage key start end #从高到低

5.6 返回指定分数范围的成员
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]     #从低到高
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]  #从高到低

5.7 返回指定分数范围成员个数
zcount key min max

5.8 删除成员
zrem key member [member ...]

5.9 删除指定排名内的升序元素
ZREMRANGEBYRANK key start stop

5.10删除指定分数范围的成员
ZREMRANGEBYSCORE key min max

5.11 交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

5.12 并集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

相关文章:

  • Linux环境搭建MCU开发环境
  • MCP架构全解析:从核心原理到企业级实践
  • Kubernetes架构与核心概念深度解析:Pod、Service与RBAC的奥秘
  • Protos-SIP:经典 SIP 协议模糊测试工具!全参数详细教程!Kali Linux教程!
  • C#WinForm程序时方法很多时Form.cs文件会很长,如何分别写入多个文件,partial class的作用体现出来了。
  • MyBatis01
  • jetpack compose 界面刷新的几种方式 如何避免无效的界面刷新
  • Linux --OS和PCB
  • NLP学习路线图(十三):正则表达式
  • Java研学-MongoDB(一)
  • 什么是 TOML?
  • [Windows] 本地无损放大软件-realesrgan-gui
  • 3D-激光SLAM笔记
  • 使用VSCode在WSL和Docker中开发
  • 小程序使用npm包的方法
  • 【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • LeetCode - 21. 合并两个有序链表
  • Correlations氛围测试:文本或图像的相似度热图
  • [面试精选] 0206. 反转链表
  • 二叉搜索树——AVL
  • 建设植绒衣架网站/优化模型数学建模
  • 怎么做彩票游戏网站/深圳搜索引擎
  • 京东网站拼图验证怎么做/网络营销经典失败案例
  • 黄山市住房城乡建设厅网站/百度公司简介
  • ps切片以后 怎么做网站/怎么找网站
  • 网站建设六道/百度推广渠道户