【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

猜你喜欢

转载自blog.csdn.net/qq_42527269/article/details/131124942