redis 常用数据类型和常用命令

news/2025/1/15 13:08:31/文章来源:https://www.cnblogs.com/sunjiwei/p/18398658
一、数据类型
在Redis中命令不区分大小写,但key是区分大小写的,帮助命令如下: help command

help @group

解释:group 是指数据类型,比如string、hash,这样就会把关于字符串或者是hash数据类型的所有命令列出来

redis 有十大数据类型,本文介绍常用的六种。

1.1、string
在一个字符串中存储最多 512 MB的内容
# 1、set  get 设置和获取字符串
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> get name
"xiaoming"set key value [NX|XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
# 解释
NX (Not exists):仅当键不存在时才设置键值
XX:仅当键已经存在时才设置键值。
EX (EXpire):设置键的过期时间(以秒为单位)
PX :设置键的过期时间(以毫秒为单位)
GET:在设置新值之前返回键的旧值。如果键不存在,则返回空字符串# 2、mget mset 同时设置或获取多个键值对
127.0.0.1:6379> mset k2 v2 k3 v3
OK
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"注意:MSET 命令是原子性的,这意味着同时设置多个键值对时它要么完全执行,要么完全不执行。# 3、append命令追加内容到某个key对应的value中
127.0.0.1:6379> append name " xiaohone"
(integer) 17
127.0.0.1:6379> get name
"xiaoming xiaohone"如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。# 4、incr,整数增加1, DECR key ,整数减一
127.0.0.1:6379> set num 2
OK
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> decr num
(integer) 2应用场景:点赞,点一次加一
注意:如果存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。如果key不存在,会先把key的值设置为0 然后直接加一# 5、INCRBY key n  表示加n  ,  DECRBY key n 表示减n
127.0.0.1:6379> set num 2
OK
127.0.0.1:6379> 
127.0.0.1:6379> incrby num 5
(integer) 7
127.0.0.1:6379> decrby num 4
(integer) 3注意:n也必须是整数,不能是小数或别的类型。如果key不存在,会先把key的值 设置为0 然后直接加n# 6、STRLEN key
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> strlen name
(integer) 8
1.2、hash
Redis 的 hash 数据类型是一种非常有用的数据结构,它可以存储一组键值对(field-value pairs),非常适合用于存储对象。每个 hash 有一个名称(键),键下面包含多个字段(fields,不能重复),每个字段有自己的值。

基本概念:
键(Key):hash 的名称,用于标识整个 hash 结构。
字段(Field):hash 内部的键,用于标识具体的键值对。
值(Value):与字段关联的值,可以是任意字符串。

例如:

127.0.0.1:6379> hset user1 name xiaohong age 10 height 20kg
(integer) 3
127.0.0.1:6379> hgetall user1
1) "name"
2) "xiaohong"
3) "age"
4) "10"
5) "height"
6) "20kg"

hash常用命令:

命令	                                      命令对应描述
HSET key field value [field2 value2 ]	    将哈希表 key 中的字段 field 的值设为 value,也可以同时设置多个field-value。
HMSET key field1 value1 [field2 value2 ]	同时将多个 field-value (域-值)对设置到哈希表 key 中
HSETNX key field value	                    只有在字段 field 不存在时,设置哈希表字段的值。
HGET key field	                            获取存储在哈希表中指定字段的值。
HGETALL key	                                获取在哈希表中指定 key 的所有字段和值
HMGET key field1 [field2]	                获取所有给定字段的值
HDEL key field1 [field2]	                删除一个或多个哈希表字段
HEXISTS key field	                        查看哈希表 key 中,指定的字段是否存在。
HINCRBY key field increment	                为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment            为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
HKEYS key	                                获取所有哈希表中的字段
HLEN key	                                获取哈希表中某个字段的对应的键的数量
HVALS key	                                获取哈希表中某个key的所有值。
HSCAN key cursor [MATCH pattern] [COUNT count]	迭代哈希表中的键值对。# 例子:
127.0.0.1:6379> hset user1 name xiaohong age 10 height 20kg
(integer) 3
127.0.0.1:6379> hgetall user1
1) "name"
2) "xiaohong"
3) "age"
4) "10"
5) "height"
6) "20kg"
127.0.0.1:6379> hget user1 age
"10"
127.0.0.1:6379> hkeys user1
1) "name"
2) "age"
3) "height"
127.0.0.1:6379> hlen user1
(integer) 3
127.0.0.1:6379> hvals user1
1) "xiaohong"
2) "10"
3) "20kg"


1.3、list

Redis 的列表(List)数据类型是一种有序的字符串集合,非常适合用于实现消息队列、任务队列等场景。列表中的每个元素都是一个字符串,列表按照插入顺序排列,可以从列表的头部(left)或尾部(right)进行操作。

基本概念:
键(Key):列表的名称,用于标识整个列表。
元素(Elements):列表中的每个字符串值。

1. LPUSH 和 RPUSH
用于在列表的头部或尾部添加一个或多个元素。
LPUSH:将一个或多个值插入到列表的头部(左边)
RPUSH:将一个或多个值插入到列表的尾部(右边)127.0.0.1:6379> lpush list1 a b c
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush list2 a b c
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"2、LRANGE key start stop
用于获取列表中指定范围内的元素,如果想获取所有值,则start为0,stop为-1
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"3、LPOP n和 RPOP n
LPOP:从列表的头部(左边)弹出n个元素。
RPOP:从列表的尾部(右边)弹出n个元素。
127.0.0.1:6379> lpop list1 2
1) "a"
2) "b"
127.0.0.1:6379> lrange list1 0 -1
1) "c"4、 LINDEX key index
用于获取列表中指定索引位置的元素。
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lindex list1 1
"a"5、llen key
用于获取列表的长度
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> llen list1
(integer) 36、LREM key count value
用于移除列表中与给定值匹配的元素
参数说明:
count:如果 count 大于 0,则从头部开始移除;如果 count 小于 0,则从尾部开始移除;如果 count 为 0,则移除所有匹配的元素。
返回值:
返回被移除的元素数量。
127.0.0.1:6379> lrem list1 1 a
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "c"7、LSET key index value
用于设置列表中指定索引位置的元素值,只能设置已存在的索引位置,比如有两个值,那索引就是0和1,不能设置索引为2的值,否则会报错(error) ERR index out of range,新值会覆盖旧的值;
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lset list1 1 d
OK
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "d"
1.4、set
Redis set(集合)遵循无序排列的规则,集合中的每一个元素都是字符串类型,且不可重复,无序。集合有一个非常重要的特性就是“自动去重”,这使得它可以适用于存储唯一的元素的场景,比如过滤掉已中奖用户的 id,保证该用户不会被第二次抽中,比如用户列表、标签集合等。
1、SADD key member [member ...] — 添加一个或多个成员到集合中,如果成员已经是集合的成员,则忽略该成员
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> sadd set1 c b d
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> smembers set1
1) "b"
2) "c"
3) "a"
4) "d"2、SMEMBERS key 获取集合中的所有成员3、SISMEMBER key member — 判断成员是否是集合的成员
127.0.0.1:6379> sismember set1 a
(integer) 1
127.0.0.1:6379> sismember set1 e
(integer) 04、SREM key member [member ...] — 移除集合中的一个或多个成员
127.0.0.1:6379> srem set1 c d
(integer) 2
127.0.0.1:6379> smembers set1
1) "b"
2) "a"5、SCARD key — 获取集合中元素的数量
127.0.0.1:6379> scard set1
(integer) 26、SINTER, SUNION, SDIFF — 分别用于计算多个集合的交集、并集和差集
交集:选择一个集合作为基准集合(通常是第一个提供的集合),然后初始化一个空的交集结果,然后遍历基准集合中的每一个元素,检查该元素是否也存在于其他所有提供的集合中,所以如果集合元素较多,交集会比较慢,一般选元素少的放在第一个位置。差集:会遍历第一个集合中的所有元素,并检查这些元素是否也存在于其他的集合中。如果一个元素只存在于第一个集合中,那么它就被认为是差集的一部分
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> smembers set2
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> sdiff set1 set2
1) "a"
127.0.0.1:6379> sdiff set2 set1
1) "c"
2) "d"7、SINTERSTORE, SUNIONSTORE, SDIFFSTORE — 这些命令类似于上述的集合运算,但是结果会被存储到一个新的集合中
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]
SDIFFSTORE  destination key [key ...]8、SPOP key   移除并返回集合中的一个随机元素  
127.0.0.1:6379> spop set1
"a"9、SSCAN key cursor [MATCH pattern] [COUNT count]  
迭代集合中的元素 。它允许你逐步遍历一个集合中的元素,而不需要一次性加载整个集合到内存中,这对于大型集合特别有用,因为它可以避免因为一次性加载所有元素而导致的内存消耗过大。参数说明
key: 需要遍历的集合键。
cursor: 游标,用于追踪迭代的位置。初始时应设置为 0。
MATCH pattern: 可选参数,用于限制返回结果中的元素,使其符合给定的模式。常用的匹配模式:*(星号):匹配零个或多个字符。?(问号):匹配单个字符。[set]:匹配括号内的任何一个字符。例如,[abc] 可以匹配 a、b 或 c。[!set] 或 [^set]:匹配不在括号内的任何一个字符。例如,[!abc] 或 [^abc] 可以匹配除了 a、b 或 c 之外的任何单个字符。例如:匹配以特定前缀开始的元素:模式:user*解释:匹配以 user 开头的任何键。示例:user1, user2, user100eg:
如果你想只返回以 item 开头的元素,可以使用模式 item*:
SSCAN myset 0 MATCH item*COUNT count: 可选参数,用于指定每次迭代返回的最大元素数量。请注意,Redis 实际返回的元素数量可能小于或等于这个值。返回值
SSCAN 命令返回一个包含两个元素的数组:1、下一次迭代时应该使用的游标。2、匹配模式的元素列表(如果没有匹配模式,则返回集合中的元素)。
如果游标返回 0,则表示迭代完成。否则,应使用返回的新游标继续迭代例如:
不带count参数
> SSCAN myset 0
1) "0"
2) 1) "item1"2) "item2"3) "item3"4) "item4"
这里返回的游标是 0,意味着扫描完成,并且返回了集合中的所有元素。使用 COUNT 参数,如果我们想要每次只返回两个元素,可以使用 COUNT 参数:
> SSCAN myset 0 COUNT 2
1) "2"
2) 1) "item1"2) "item2"
这里返回的游标是 2,意味着还需要继续扫描。我们可以使用返回的游标继续迭代:
> SSCAN myset 2 COUNT 2
1) "4"
2) 1) "item3"2) "item4"
现在返回的游标是 4,我们继续使用它:
> SSCAN myset 4 COUNT 2
1) "0"
2) (empty list or set)
这次返回的游标是 0,表示扫描完成,没有更多的元素了。
1.5、zset(sorted set)
Redis 的有序集合(ZSet)是一种集合数据类型,其中的每个成员都关联了一个分数(score)。这个分数用于对集合中的成员进行排序,使得有序集合不仅能够存储不重复的元素,还能根据分数对元素进行排序。有序集合非常适合用于排行榜、任务队列等场景。
1、ZADD key score1 member1 [score2 member2]  向有序集合添加一个或多个成员及其分数,如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置
127.0.0.1:6379> zadd zset1 2 b 3 c
(integer) 2
127.0.0.1:6379> 2、ZRANGE/ZREVRANGE:获取有序集合中指定范围内的成员。ZRANGE 按照升序排列,ZREVRANGE 按照降序排列。
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]127.0.0.1:6379> zrange zset2 0 -1
1) "c"
2) "b"ZREVRANGE key start stop [WITHSCORES]:返回有序集中指定区间内的成员,通过索引,分数从高到低
ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分数区间内的成员,分数从高到低排序3、ZSCORE key member:获取集合中指定成员的分数
127.0.0.1:6379> zscore zset1 b
"2"4、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
根据分数范围获取元素,可选择是否返回分数
127.0.0.1:6379> zrangebyscore zset1 0 4 
1) "b"
2) "c"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores
1) "b"
2) "2"
3) "c"
4) "3"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores limit 0 1
1) "b"
2) "2"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores limit 1 2
1) "c"
2) "3"5、ZREM key member [member ...]
移除一个或多个元素
127.0.0.1:6379> zadd zset1 4 d 5 e
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> zrem zset1 d e 
(integer) 2ZREMRANGEBYLEX key min max:移除有序集合中给定的字典区间的所有成员
ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员
ZREMRANGEBYSCORE key min max:移除有序集合中给定的分数区间的所有成员6、ZCARD key
获取集合中的元素数量
127.0.0.1:6379> zcard zset1
(integer) 27、ZRANK key member
获取指定成员在有序集合中的排名(基于分数,从 0 开始)
127.0.0.1:6379> zrank zset1 b
(integer) 0
127.0.0.1:6379> zrank zset1 c
(integer) 18、ZUNIONSTORE destination numkeys key [key ...]	
计算给定的一个或多个有序集的并集,并存储在新的 key 中
1.6、bitmap
在日常开发过程中会有一些 bool 类型数据需要存取。例如:记录用户一年内签到的次数,签了则是1,没签则是 0。如果使用 key-value 来存储,那么每个用户都要记录 365 次,当用户成百上亿时,需要的存储空间将非常巨大。为了解决这个问题,Redis 提供了位图结构。

Redis 的 Bitmaps(位图)是一种非常高效的数据结构,用于存储二进制位(bits)。每个位都可以设置为 0 或 1,并且 Redis 位图中的每个位对应一个字节中的一个比特。Bitmaps 可以用于多种用途,如统计网站访问量、跟踪用户行为、管理权限位等。

在 Redis 中,位图是以字符串的形式存储的,每个字符串可以包含多个位,位图中的每个位都可以通过索引来访问,索引从 0 开始。

1、SETBIT key offset value:设置位图中的bit值
offset:指定要操作的位的位置。
value:可以是 0 或 1。
示例:SETBIT visits 0 1 将键 visits 的第 0 位设置为 1。2、GETBIT key offset: 获取位图中某个位上的值
返回 键key 在位置 offset 处的位值。
示例:GETBIT visits 0 将返回键 visits 的第 0 位的值3、BITCOUNT key [start end]
统计 键 key 中值为 1 的位的数量。
可选参数 start 和 end 用于指定统计的范围。
示例:BITCOUNT visits 将返回键 visits 中所有位为 1 的数量。
二、关于key的常用命令
1、DEL key
该命令用于在 key 存在时删除 key。2、DUMP key
序列化给定 key ,并返回被序列化的值。序列化:把对象转化为可传输的字节序列过程称为序列化。反序列化:把字节序列还原为对象的过程称为反序列化。3、EXISTS key
检查给定 key 是否存在。
4、EXPIRE key seconds
设置 key 的过期时间,key 过期后将不再可用。单位以秒计。5、EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。6、PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计。7、PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计8、KEYS pattern
查找所有符合给定模式( pattern)的 key 。9、MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。10、PERSIST key
移除 key 的过期时间,key 将持久保持。11 、PTTL key
以毫秒为单位返回 key 的剩余的过期时间。12、TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。-1表示永不过期,-2表示已过期13、RANDOMKEY
从当前数据库中随机返回一个 key14、RENAME key newkey
修改 key 的名称15、RENAMENX key newkey
仅当 newkey 不存在时,将 key 改名为 newkey16、SCAN cursor [MATCH pattern] [COUNT count]
遍历输出数据库中的数据库键。可以具体指定哪个库17、TYPE key
返回 key 所储存的值的类型。18、select dbindex 用于切换数据库,共有16个库,索引是从0到15,默认为019、dbsize 查看当前数据库key的数量20 、flushdb 清空当前库21 、flushall 清空全部库

参考文献:
https://redis.io/
https://www.cnblogs.com/auguse/articles/17151950.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794542.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FancyVideo环境搭建推理

​引子很少关注360开源的代码,最近360AI团队开源了最新视频模型FancyVideo,据说RTX3090可跑。可以在消费级显卡 (如 GeForce RTX 3090) 上生成任意分辨率、任意宽高比、不同风格、不同运动幅度的视频,其衍生模型还能够完成视频扩展、视频回溯的功能,一种基于 UNet 架构的视…

计算机网络之TCP/IP协议简介

TCP/IP协议 简介 首先TCP/IP协议不只是表示TCP协议和IP协议两种协议,而是一个协议簇。协议簇是什么并不难理解,就是字面意思,一个由多个协议组合而成的集合体,其中最有代表性的就是TCP和IP这两个协议,除了这两个还有我们熟知的FTP、UDP等协议。当然我们下面主要介绍的还是…

博欧实习(三十四)

今日任务 1、今日继续完善系统,协助改善了汇总表,解决无法在线上数据库运行的问题。 2、修改监控实体,修改监控页面显示数据不正确问题。3、确认交付信息修改在调整,出库日期自动增加三个月

【可视化+编程】快速掌握seaborn的基础用法

https://mp.weixin.qq.com/s/gRkFrLbChEJ5kHsGokLA6A?poc_token=HNGw3majZY6E6VuU_gYN_ODo66iKNCpKzodh8_3T

密码正则表达式

String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*(){}+=]).{9,}$";

centos7.9安装mysql8.0.39

1. 添加 MySQL Yum 仓库 首先,需要下载并安装 MySQL Yum 仓库 RPM 包:sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm2. 更新 Yum 缓存 安装完 Yum 仓库后,更新 Yum 缓存:sudo yum clean all sudo yum makecache3. 安装 MySQL 现在可以…

在stable diffussion中完美修复AI图片

无论您的提示和模型有多好,一次性获得完美图像的情况很少见。修复小缺陷的不可或缺的方法是图像修复(inpainting)无论您的提示和模型有多好,一次性获得完美图像的情况很少见。 修复小缺陷的不可或缺的方法是图像修复(inpainting)。在这篇文章中,我将通过一些基本示例来介…

51nod 1020 逆序排列

51nod 1020 逆序排列 学习笔记 其实要预处理,但唐的我非要每次都求一遍。 设状态为 \(dp[i][j]\) 选了 i 个数逆序对数为 j 的排序种类数。 首先初始化 \(dp[i][0]=1\) 即没有逆序对,转移方程 \(dp[i][j]=dp[i-1][j]+dp[i-1][j-1]+……+dp[i-1][j-i]\) 这是显然的(放上这个数…

2181.合并零之间的节点

问题描述: 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有…

调谐半导体吸收光谱(TDLAS)技术简介

一、调谐半导体吸收光谱(TDLAS)技术简介 TDLAS是Tunable Diode Laser Absorption Spectroscopy的简称,该技术主要是利用可调谐半导体激光器的窄线宽和波长随注入电流改变的特性,通过调制激光器的波长,使激光器的波长扫描过被测气体分子的吸收峰,从而基于比尔朗伯定律,使气…

极狐GitLab 新一代容器镜像仓库正式上线啦!

从极狐GitLab 17.3 开始,私有化部署实例也可以使用新一代容器镜像仓库啦!新一代容器镜像仓库具有更高效的零宕机垃圾收集功能和其他优势。从去年开始,极狐GitLab 就启动了重构容器镜像仓库的计划,用以构建具有更强功能的镜像仓库,比如零宕机垃圾收集。自从将此功能成功迁移…

集合底层学习笔记

集合的底层原理 数据结构中有 数组 和 链表 来实现对数据的存储,但这两者基本上就是两个极端。数组:数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度很小,为O(1);数组的特点是:寻址容易,插入和删除困难。 链表:链表存储区间不连续,占…