(五)、Redis五大数据类型

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: (五)、Redis五大数据类型

Redis的五大数据类型

官网命令参考:http://redisdoc.com/

String(字符串)

字符串类型是Redis最基本的数据结构,首先键都是String类型,其他几种数据结构都是在String类型上建立的,字符串可以是简单字符串,也可以是复杂字符串(二进制的图片、视频、音频、XML)等等,但是最大值Value不超过512MB

(1)追加值

append key value

127.0.0.1:6379> get k1
"3"
127.0.0.1:6379> append k1 12345
(integer) 6
127.0.0.1:6379> get k1
"312345"

(2)返回 key 所储存的字符串值的长度

strlen key

127.0.0.1:6379> strlen k1
(integer) 6

(3)累加1

incr key

如果不是整数会返回错误

127.0.0.1:6379> get k2
"4"
127.0.0.1:6379> incr k2
(integer) 5
127.0.0.1:6379> incr k2
(integer) 6
127.0.0.1:6379> get k2
"6"

(4)累减1

decr key

127.0.0.1:6379> get k2
"6"
127.0.0.1:6379> decr k2
(integer) 5
127.0.0.1:6379> decr k2
(integer) 4
127.0.0.1:6379> get k2
"4"

(5)指定递增

incrby key value

127.0.0.1:6379> get k2
"4"
127.0.0.1:6379> incrby k2 3
(integer) 7
127.0.0.1:6379> incrby k2 3
(integer) 10
127.0.0.1:6379> get k2
"10"

(6)指定递减

decrby key value

127.0.0.1:6379> get k2
"10"
127.0.0.1:6379> decrby k2 2
(integer) 8
127.0.0.1:6379> decrby k2 2
(integer) 6
127.0.0.1:6379> get k2
"6"

(7)获取Key的指定范围

getrange key a b

127.0.0.1:6379> get k1
"312345"
127.0.0.1:6379> getrange k1 0 3
"3123"
127.0.0.1:6379> getrange k1 0 -1
"312345"

从0到-1表示全部

(8)设置指定位置的字符

127.0.0.1:6379> setrange k1 0 aaa
(integer) 6
127.0.0.1:6379> get k1
"aaa345"

(9)Setex 命令为指定的 key 设置值及其过期时间

Setex key seconds value

如果 key 已经存在, SETEX 命令将会替换旧的值

127.0.0.1:6379> get k2
"6"
127.0.0.1:6379> SETEX k2 60 10
OK
127.0.0.1:6379> ttl k2
(integer) 49
127.0.0.1:6379> get k2
"10"

(10)批量设置、获取值

mset k1 v1 k2 v2

mget k1 k2 k3

127.0.0.1:6379> mset k2 111 k3 222 k4 333
OK
127.0.0.1:6379> mget k2 k3 k4
1) "111"
2) "222"
3) "333"

如果已存在键,则都不会执行

Hash(哈希)

类似java里面的Map,hash是一个键值对集合,

(1)hset、hget

用于为哈希表中的字段赋值、获取值

127.0.0.1:6379> hset user id 1
(integer) 1
127.0.0.1:6379> hget user id
"1"

(2)hmset

Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中

127.0.0.1:6379> hmset customer id 10 name ylc age 22
OK
127.0.0.1:6379> hmget customer id name age
1) "10"
2) "ylc"
3) "22"

(3)hgetall

命令用于返回哈希表中,所有的字段和值

127.0.0.1:6379> hgetall customer
1) "id"
2) "10"
3) "name"
4) "ylc"
5) "age"
6) "22"

(4)hdel

删除某个字段

127.0.0.1:6379> hdel customer name
(integer) 1

(5)hlen

获取元素个数

127.0.0.1:6379> hlen customer
(integer) 2

(6)hexists

判断字段是否存在

127.0.0.1:6379> hexists customer name
(integer) 0
127.0.0.1:6379> hexists customer id
(integer) 1

(7)hkeys、hvals

获取所有key或者value

127.0.0.1:6379> hkeys customer
1) "id"
2) "age"
127.0.0.1:6379> hvals customer
1) "10"
2) "22"

(8)hincrby

用于为哈希表中的字段值加上指定增量值

127.0.0.1:6379> hincrby customer age 2
(integer) 24
127.0.0.1:6379> hincrby customer age 2
(integer) 26

(9)hincrbyfloat

用于为哈希表中的字段值加上指定浮点数增量值

127.0.0.1:6379> hset customer score 99.0
(integer) 1
127.0.0.1:6379> hincrbyfloat customer score 0.5
"99.5"

(10)hsetnx

用于为哈希表中不存在的的字段赋值,如果字段已经存在于哈希表中,操作无效

127.0.0.1:6379> hsetnx customer age 30
(integer) 0
127.0.0.1:6379> hsetnx customer money 30
(integer) 1

List列表

是一个简单的字符串链表,可以添加在元素的头部和尾部

(1)将一个或多个值插入到列表头部

lpush key v1 v2 v3

127.0.0.1:6379> lpush list 1 2 3 4 5
(integer) 5
127.0.0.1:6379> keys *
1) "list"
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

(2)将一个或多个值插入到列表尾部

127.0.0.1:6379> rpush list2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

(3)lpop顶部出栈、rpop底部出栈

127.0.0.1:6379> lrange list 0 -1 
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lpop list
"5"
127.0.0.1:6379> rpop list
"1"
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"

(4)lindex

根据下标获取索引

127.0.0.1:6379> lindex list 0
"4"
127.0.0.1:6379> lindex list 1
"3"
127.0.0.1:6379> lindex list 2
"2"

(5)llen

数组长度

127.0.0.1:6379> llen list
(integer) 3

(6)lrem key

删除多个vlue

127.0.0.1:6379> rpush list03 1 1 1 2 2 2 3 3 3 4 4 4
(integer) 12
127.0.0.1:6379> lrem list03 2 3
(integer) 2
127.0.0.1:6379> lrange list03 0 -1
 1) "1"
 2) "1"
 3) "1"
 4) "2"
 5) "2"
 6) "2"
 7) "3"
 8) "4"
 9) "4"
10) "4"

(6)itrim

截取指定范围值

127.0.0.1:6379> lrange list03 0 -1
 1) "1"
 2) "1"
 3) "1"
 4) "2"
 5) "2"
 6) "2"
 7) "3"
 8) "4"
 9) "4"
10) "4"
127.0.0.1:6379> ltrim list03 3 7
OK
127.0.0.1:6379> lrange list03 0 -1
1) "2"
2) "2"
3) "2"
4) "3"
5) "4"

(7)lset key index value

喜欢key下标

127.0.0.1:6379> lrange list03 0 -1
1) "2"
2) "2"
3) "2"
4) "3"
5) "4"
127.0.0.1:6379> lset list03 1 x
OK
127.0.0.1:6379> lrange list03 0 -1
1) "2"
2) "x"
3) "2"
4) "3"
5) "4"

(8)linsert key before/after

替换值

127.0.0.1:6379> linsert list03 before x java
(integer) 6
127.0.0.1:6379> lrange list03 0 -1
1) "2"
2) "java"
3) "x"
4) "2"
5) "3"
6) "4"

(9)rpoplpush

用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange list2  0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> rpoplpush list2  list
"4"
127.0.0.1:6379> lrange list2  0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "5"
3) "4"
4) "3"
5) "2"

list它是一个字符串链表,对头部尾部操作效率最高,如果值全部移除,对应键全部消失

Set(集合)

Set是String类型的无序集合,通过HashTable实现

(1)sadd

Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合

127.0.0.1:6379> sadd set01 1 1 2 2 3 3
(integer) 3

(2)smembers

命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合

127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"

(3)Sismember

判断成员元素是否是集合的成员

127.0.0.1:6379> sismember set01 1
(integer) 1
127.0.0.1:6379> sismember set01 4
(integer) 0

(4)scard

获取集合中元素个数

127.0.0.1:6379> scard set01
(integer) 3

(5)srem

删除集合元素

127.0.0.1:6379> srem set01 3
(integer) 1
127.0.0.1:6379> smembers set01
1) "1"
2) "2"

(6)srandmember

随机选出几个数

127.0.0.1:6379> sadd set02 2 3 4 5 6 7 8 9
(integer) 8
127.0.0.1:6379> srandmember set02 3
1) "5"
2) "4"
3) "9"
127.0.0.1:6379> srandmember set02 3
1) "5"
2) "3"
3) "2"
127.0.0.1:6379> srandmember set02 3
1) "5"
2) "4"
3) "6"

(7)spop

随机出栈

127.0.0.1:6379> smembers set02
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"
127.0.0.1:6379> spop set02
"4"
127.0.0.1:6379> spop set02
"9"

(8)smove

将指定成员 member 元素从 source 集合移动到 destination 集合

127.0.0.1:6379> sadd set03 x y z
(integer) 3
127.0.0.1:6379> smembers set03
1) "z"
2) "y"
3) "x"
127.0.0.1:6379> smove set02 set03 5
(integer) 1
127.0.0.1:6379> smembers set03
1) "z"
2) "y"
3) "5"
4) "x"

(9)sdiff

数组差集,在一个集合中但不在第二个

127.0.0.1:6379> sadd set01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd set02 3 4 5 a b
(integer) 5
127.0.0.1:6379> sdiff set01 set02
1) "1"
2) "2"
127.0.0.1:6379> sdiff set02 set01
1) "b"
2) "a"

(10)sinter

交集

127.0.0.1:6379> sinter set01 set02
1) "3"
2) "4"
3) "5"

(11)sunion并集

127.0.0.1:6379> sunion set01 set02
1) "b"
2) "a"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"

ZSet(有序集合)

(1)zadd

用于将一个或多个成员元素及其分数值加入到有序集当中

127.0.0.1:6379> zadd zset 60 v1 70 v2 80 v3 100 v5
(integer) 4

(2)zrange

返回有序集中,指定区间内的成员

127.0.0.1:6379> zrange zset 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v5"

(3)zrangebyscore

返回所有符合条件 x <= score <= y 的成员,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)

127.0.0.1:6379> zrangebyscore zset 60 90
1) "v1"
2) "v2"
3) "v3"

还可以进行分页

127.0.0.1:6379> zrangebyscore zset 60 90
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrangebyscore zset 60 90 limit 2 2
1) "v3"

(4)zrem

用于移除有序集中的一个或多个成员,不存在的成员将被忽略

127.0.0.1:6379> zrem zset v5
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"

(5)zcard

有序集的元素个数,否则返回0

127.0.0.1:6379> zcard zset
(integer) 3

(6)zount

用于计算有序集合中指定分数区间的成员数量

127.0.0.1:6379> zcount zset 60 80
(integer) 3

(7)zrank

返回有序集中指定成员的排名

127.0.0.1:6379> zrank zset v2
(integer) 1

(8)zscore

成员的分数值

127.0.0.1:6379> zscore zset v2
"70"

(9)zrevrank

逆序获取下标值

127.0.0.1:6379> zrevrank zset v3
(integer) 0
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"

(10)zrevrange

逆序遍历

127.0.0.1:6379> zrevrange zset 0 -1
1) "v3"
2) "v2"
3) "v1"

(11)zrevrangebyscore

返回有序集中指定分数区间内的所有的成员,从大到小排列

127.0.0.1:6379> zrevrangebyscore zset 90 60
1) "v3"
2) "v2"
3) "v1"

键(Key)通用命令

查询所有键:Keys *

127.0.0.1:6379> keys k?
1) "k1"
127.0.0.1:6379> keys *
1) "k1"
2) "myhash"
3) "key:__rand_int__"
4) "counter:__rand_int__"

判断键是否存在:exists key

127.0.0.1:6379> exists k1
(integer) 1

移动key:move key db

127.0.0.1:6379> move k1 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
1) "k1"

给Key设置过期时间:expire key seconds

127.0.0.1:6379[2]> expire k1 10
(integer) 1

查看剩余过期时间:ttl key

127.0.0.1:6379[2]> ttl k1
(integer) 6
127.0.0.1:6379[2]> ttl k1
(integer) -2

-1表示永不过期,-2表示已过期,过期之后数据库不再有

删除键:del key

127.0.0.1:6379> del k2
(integer) 1

删除成功会返回个数,删除一个不存在的会返回0

del a b c表示删除多个键

查看键的类型:type key

127.0.0.1:6379> type k1
string


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
15天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
31 1
|
1月前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
37 1
|
2月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
56 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 数据库
190 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
3月前
|
存储 缓存 NoSQL
深入理解Redis数据类型String原理
本文深入探讨了Redis中String数据类型的实现原理和使用场景,基于Redis 5.0版本进行分析。
深入理解Redis数据类型String原理
下一篇
无影云桌面