【2023】Redis数据类型

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【2023】Redis数据类型


作为基于键值对的NoSQL数据库,Redis支持五种数据类型:字符串(string)类型、哈希(hash)类型、列表(list)类型、集合(set)类型和有序集合(sorted set或zset)类型。

不同的数据类型会有不同的操作命令:

1.针对字符串类型的命令

字符串类型是一种简单的键值对结构,其中键是字符串类型,值可以是字符串、整数或浮点数。Redis的字符串类型可以存储的数据最大长度为512MB。

常用的命令包括:

  • 设置字符串的值:
set key value
  • 获取字符串的值
get key
  • 当key不存在时才能设置值
setNX key value
  • 同时设置和获取多个字符串
mset key value [key value]
mget key [key]
# 注意mset与mget不包含生存时间
  • 对值进行增量和减量,注意值需要是数字类型
127.0.0.1:6379> incr visit
(integer) 1
127.0.0.1:6379> incrby visit 10
(integer) 11
127.0.0.1:6379> decr visit
(integer) 10
127.0.0.1:6379> decrby visit 5
(integer) 5
  • 为key值设置新值,会覆盖旧值
getset 001 'zhangsan'
getset 001 'lisi'
# 这个时候001的值为lisi

2.针对哈希类型的命令

哈希类型是一种内部结构为哈希表的键值对集合。哈希类型的键是一个字符串类型,而值则是由多个域和域值组成的映射表。Redis的哈希类型操作支持添加、获取、删除单个或多个域,也支持获取所有域和域值、获取哈希表中元素的数量等操作。哈希类型可以用于存储对象,如用户信息、商品信息等。哈希类型的优点是可以快速地访问单个域,适合于存储一些有结构化的数据。

常用的命令:

  • 设置数据,可以用多个field value对来存储数据,这里field可以理解成对象的属性名,value可以理解成对象的属性值。
hset key field value [field value]
例:
127.0.0.1:6379> hset 001 name 'peter' salary 10000 dep dataTeam
(integer) 3
  • 读取数据
hget key field
例:
127.0.0.1:6379> hget 001 name
"peter"
127.0.0.1:6379> hget 001 salary
"10000"
  • 后续数据覆盖之前数据,只有当key和field所对应的value不存在时才会设置对应的value,且只能带一组field value
hsetnx 002 name 'tom'
  • 查看该key所对应哈希类型数据的所有field
127.0.0.1:6379> hset 010 name 'mary' salary 8000
(integer) 2
127.0.0.1:6379> hkeys 010
1) "name"
2) "salary"
127.0.0.1:6379> hvals 010
1) "mary"
2) "8000"
127.0.0.1:6379> hgetall 010
1) "name"
2) "mary"
3) "salary"
4) "8000"
  • 判断值是否存在
hexists key field
  • 哈希中的删除,可删除一个key对应的一个或多个field值
hdel key field [field ...]

3.针对列表类型变量的命令

Redis中的列表类型是一种有序的数据结构,它可以在列表的两端进行添加和删除元素。列表中的每个元素都是一个字符串,而且列表的长度是可以动态变化的。Redis的列表类型提供了丰富的命令,可以对列表进行头部插入、尾部插入、头部删除、尾部删除、按索引插入、按索引删除、获取指定区间的元素等操作。另外,Redis的列表类型还可以用来实现队列和栈等数据结构。

常用的命令:

  • 把一个或多个值插入列表的头部,key表示列表,element表示值
lpush key element [element ...]
  • 读取列表的值,index代表索引号,从0开始
lindex key index
例:
lindex 001 0
  • 像列表尾部插入数据,与lpush相似
rpush key element [element ...]
  • 当key存在时才会向头部或尾部插入数据,不存在不执行
lpushx
rpushx
  • 获取区间内数据
lrange key start stop
例:
127.0.0.1:6379> rpush 003 'dataTeam' 15000 'Mary'
(integer) 3
127.0.0.1:6379> lrange 003 0 1
1) "dataTeam"
2) "15000"
127.0.0.1:6379> lrange 003 0 2
1) "dataTeam"
2) "15000"
3) "Mary"
  • 修改列表中元素
lset key index element
例:
127.0.0.1:6379> lindex 003 1
"15000"
127.0.0.1:6379> lset 003 1 18000
OK
127.0.0.1:6379> lindex 003 1
"18000"
  • 删除列表头部或尾部的第一个数据
lpop key
rpop key
  • 删除列表中指定元素
lrem key count element
例:
127.0.0.1:6379> lpush 001 1 1 2 2 1
(integer) 5
127.0.0.1:6379> lrem 001 0 1
(integer) 3

4.针对集合的命令

Redis中的集合是一种无序、唯一的数据结构,它可以存储多个字符串元素,并支持集合间的交集、并集、差集等操作。集合中的元素必须是字符串类型,且元素之间互不相同。

常用的命令:

  • 向集合中添加一个或多个元素,集合中无法存储重复数据且无序
sadd key member [member ...]
  • 读取集合中所有数据
smembers key
  • 判断元素是否存在
sismember key member
例:
127.0.0.1:6379> sismember teamName 'HR'
判断teamName集合中HR元素是否存在
  • 交集、并集和差集
# 获得多个key对应的交集
sinter key [key ...]
# 获得多个key对应的并集
sunion key [key ...]
# 获得多个key对应的差集
sdiff key [key ...]
例:
127.0.0.1:6379> sadd Mike Math English Computer
(integer) 3
127.0.0.1:6379> sadd Tom Computer Math Piano
(integer) 3
127.0.0.1:6379> sinter Mike Tom
1) "Computer"
2) "Math"
127.0.0.1:6379> sunion Mike Tom
1) "Computer"
2) "Piano"
3) "Math"
4) "English"
127.0.0.1:6379> sdiff Mike Tom
1) "English"
127.0.0.1:6379> sdiff Tom Mike
1) "Piano"
  • 删除集合数据
srem key member [member ...]

5.针对有序集合的命令

Redis的有序集合是一种数据结构,它类似于普通的Set,但是每个成员都会关联一个分数(score),用于进行排序。有序集合的主要特点是元素的插入、删除和查找都非常快,时间复杂度都是O(logN)。同时它还支持按照分数范围查找元素,以及按照成员名字的字典序排序

在有序集合的实现中,Redis使用了一种叫做跳跃表(Skip List)的数据结构。跳跃表是一种随机化的数据结构,它通过在普通链表上增加多级索引来加速查找。跳跃表的插入、删除和查找时间复杂度均为O(logN),与平衡树相当,但是实现起来比平衡树简单,而且性能也非常不错。

总之,有序集合是Redis中非常实用的一个数据结构,它可以用于各种场景,比如排行榜、计数器、社交网络等等。

常用的命令:

  • 向有序集合添加元素
zadd key [NX|XX] [CH] [INCR] score member [score member ...]

命令用于向有序集合中添加一个或多个成员,并为每个成员设置一个分数(score)。其中:

key:有序集合的键名。

[NX|XX]:可选参数,当NX表示只有当成员不存在时才执行添加操作,XX则表示只有当成员已经存在时才执行更新操作。

[CH]:可选参数,表示在添加操作时返回有序集合中新增的成员个数。

[INCR]:可选参数,表示在添加操作时将新成员的分数与已存在的成员的分数相加。

score:成员对应的分数,必须是一个浮点数。

member:成员的值,必须是一个字符串。

  • 读取key里指定score区间范围内的数据
zrange key start stop [WITHSCORES]
  • 更改元素对应的分值
zincrby key increment member
  • 获取元素的分值
zscore key member
  • 查看有序集合里的元素排名
zrank key member
倒数排名:
zrevrank key member
  • 删除有序集合里的值
zrem key member [member ...]
  • 令删除key所指向的有序集合里排名在start到stop范围的元素,注意第一个元素排名为0
zremrangebyrank key start stop
  • 删除key指向的有序队列里score(分值)在min到max范围内的元素
 zremrangebyscore key min max


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
10天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
24 1
|
30天前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
36 1
|
2月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
54 2
|
3月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
3月前
|
NoSQL Java Redis
Redis5种数据类型
这篇文章介绍了Redis的五种数据类型:字符串、列表、集合、有序集合和哈希,并通过代码示例展示了如何在Spring框架中使用RedisTemplate操作这些数据类型。
Redis5种数据类型
|
3月前
|
存储 NoSQL Java
深入理解Redis数据类型Hashes原理
本文深入分析了Redis中的hashes数据类型,这是一种用于存储行记录的数据结构,允许一个key下存储多条记录。
深入理解Redis数据类型Hashes原理
|
3月前
|
存储 NoSQL 算法
深入理解Redis数据类型Zset原理
本文深入探讨了Redis中的Zset(有序集合)数据类型,它是一种可以存储排序功能的集合,其中每个元素都具有一个浮点型的score属性,用于根据score进行排序。
深入理解Redis数据类型Zset原理
|
3月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
3月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
177 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
3月前
|
存储 缓存 NoSQL
深入理解Redis数据类型String原理
本文深入探讨了Redis中String数据类型的实现原理和使用场景,基于Redis 5.0版本进行分析。
深入理解Redis数据类型String原理