redis 五大数据类型的常用指令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:
支付宝扫一扫领红包
Q群交流 302208680
60人支持,本月 6人支持
最新打赏金额0.1元

redis 五大数据类型的常用指令

STRING

192.168.1.66:6379> get k1
"v1"
192.168.1.66:6379> append k1 12345
(integer) 7
192.168.1.66:6379> get k1
"v112345"

append的使用

192.168.1.66:6379> STRLEN k1
(integer) 7

获取长度

192.168.1.66:6379> set k1 1
OK
192.168.1.66:6379> incr k1
(integer) 2
192.168.1.66:6379> incr k1
(integer) 3
192.168.1.66:6379> get k1
"3"
192.168.1.66:6379> type k1
string

incr 设置自增

192.168.1.66:6379> decr k1
(integer) 2
192.168.1.66:6379> decr k1
(integer) 1
192.168.1.66:6379> get k1
"1"

decr 自减

192.168.1.66:6379> get k1
"9"
192.168.1.66:6379> decrby k1 2
(integer) 7
192.168.1.66:6379> decrby k1 2
(integer) 5
192.168.1.66:6379> get k1
"5"

跨越式自减decrby

192.168.1.66:6379> get k1
"0123456"
192.168.1.66:6379> getrange k1 0 -1
"0123456"
192.168.1.66:6379> getrange k1 0 3
"0123"

getrange获取范围数据

192.168.1.66:6379> get k1
"0123456"
192.168.1.66:6379> setrange k1 0 xxx
(integer) 7
192.168.1.66:6379> get k1
"xxx3456"

setrange 设置内容

192.168.1.66:6379> setex k4 10 v4
OK
192.168.1.66:6379> ttl k4
(integer) 4
192.168.1.66:6379> ttl k4
(integer) 3
192.168.1.66:6379> ttl k4
(integer) 1
192.168.1.66:6379> ttl k4
(integer) -2

setex 设置key 同时设置存活周期

192.168.1.66:6379> setnx k1 v11
(integer) 0
192.168.1.66:6379> get k1 
"xxx3456"
192.168.1.66:6379> setnx k11 v11
(integer) 1
192.168.1.66:6379> get k11
"v11"

setnx 只有不存在的时候,才能设置

192.168.1.66:6379[1]> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
192.168.1.66:6379[1]> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"

mset 批量设置

192.168.1.66:6379[1]> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"
192.168.1.66:6379[1]> msetnx k4 v4 k5 v5
(integer) 0
192.168.1.66:6379[1]> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"

msetnx 只要有一个失败,全部失败

192.168.1.66:6379[1]> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"
192.168.1.66:6379[1]> msetnx k4 v4 k5 v5
(integer) 0
192.168.1.66:6379[1]> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"
192.168.1.66:6379[1]> msetnx  k5 v5 k6 v6
(integer) 1
192.168.1.66:6379[1]> keys *
1) "k3"
2) "k4"
3) "k5"
4) "k2"
5) "k6"
6) "k1"

msetnx 都不存在,才成功

LIST

192.168.1.66:6379> LPUSH list01 1 2 3 4 5
(integer) 5
192.168.1.66:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
192.168.1.66:6379> RPUSH list02 1 2 3 4 5
(integer) 5
192.168.1.66:6379> lrange list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

先进先出队列(拉shi)

先进后出栈(喝多了,吐了)

192.168.1.66:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
192.168.1.66:6379> lpop list01
"5"
192.168.1.66:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
4) "1"

lpop 把左侧的先剔除了

老师语录:你自己敲一次,胜过听我讲十次。

192.168.1.66:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
192.168.1.66:6379> lpop list01
"5"
192.168.1.66:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
192.168.1.66:6379> RPOP list01
"1"
192.168.1.66:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
192.168.1.66:6379> LINDEX list01 2
"2"

LINDEX 获取特定的位置的数据

192.168.1.66:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
192.168.1.66:6379> llen list01
(integer) 3

llen 获取长度

192.168.1.66:6379> RPUSH list03 1 1 1 2 2 2 3 3 3 4 4 4 5 6 7
(integer) 15
192.168.1.66:6379> lrem list03 2 3
(integer) 2
192.168.1.66: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"
11) "5"
12) "6"
13) "7"

lrem 移除多个值

192.168.1.66: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"
11) "5"
12) "6"
13) "7"
192.168.1.66:6379> LTRIM list03 3 5
OK
192.168.1.66:6379> lrange list03 0 -1
1) "2"
2) "2"
3) "2"

LTRIM 从第几个开始,截取到第几个之后赋值给list

192.168.1.66:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
192.168.1.66:6379> lrange list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
192.168.1.66:6379> RPOPLPUSH list01 list02
"2"
192.168.1.66:6379> lrange list02 0 -1
1) "2"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"

RPOPLPUSH 将某个值压入

192.168.1.66:6379> lrange list02 0 -1
1) "2"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
192.168.1.66:6379> lset list02 0 0
OK
192.168.1.66:6379> lrange list02 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"

lset 设定特定位置的list值

192.168.1.66:6379> LINSERT list02 before 2 java
(integer) 7
192.168.1.66:6379> lrange list02 0 -1
1) "0"
2) "1"
3) "java"
4) "2"
5) "3"
6) "4"
7) "5"
192.168.1.66:6379> LINSERT list02 after 2 php
(integer) 8
192.168.1.66:6379> lrange list02 0 -1
1) "0"
2) "1"
3) "java"
4) "2"
5) "php"
6) "3"
7) "4"
8) "5"
192.168.1.66:6379> LINSERT list03 after 2 php
(integer) 4
192.168.1.66:6379> lrange list03 0 -1
1) "2"
2) "php"
3) "2"
4) "2"
192.168.1.66:6379> LINSERT list03 before 2 php
(integer) 5
192.168.1.66:6379> lrange list03 0 -1
1) "php"
2) "2"
3) "php"
4) "2"
5) "2"

LINSERT 在特定位置插入内容,默认查找出第一个作为参照。

SET

192.168.1.66:6379> sadd set01 1 1 2 2 3 3
(integer) 3
192.168.1.66:6379> SMEMBERS set01 
1) "1"
2) "2"
3) "3"

set 也是集合,但是不允许有重复的

192.168.1.66:6379> SISMEMBER set01 1
(integer) 1
192.168.1.66:6379> SISMEMBER set01 x
(integer) 0

sismember查看是否是成员

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
192.168.1.66:6379> SCARD set01
(integer) 3

scard 查看集合中有多少个元素

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
192.168.1.66:6379> SCARD set01
(integer) 3
192.168.1.66:6379> srem set01 3
(integer) 1
192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"

srem 删除某个元素

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
192.168.1.66:6379> sadd set01 1 2 3 4 5 6 7
(integer) 5
192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"

set的好处就是自动去重,保证数据的唯一性

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
192.168.1.66:6379> SRANDMEMBER set01 3
1) "6"
2) "7"
3) "2"
192.168.1.66:6379> SRANDMEMBER set01 3
1) "7"
2) "2"
3) "4"
192.168.1.66:6379> SRANDMEMBER set01 3
1) "3"
2) "7"
3) "1"
192.168.1.66:6379> SRANDMEMBER set01 3
1) "5"
2) "2"
3) "4"

SRANDMEMBER 随机出三个数字

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
192.168.1.66:6379> spop set01 2
1) "4"
2) "3"
192.168.1.66:6379> spop set01 2
1) "5"
2) "6"
192.168.1.66:6379> spop set01 2
1) "8"
2) "9"
192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "7"

spop 随机出栈,高并发,速度快

192.168.1.66:6379> SMEMBERS set01
1) "1"
2) "2"
3) "7"
192.168.1.66:6379> SMEMBERS set02
1) "z"
2) "y"
3) "x"
192.168.1.66:6379> smove set01 set02 1
(integer) 1
192.168.1.66:6379> SMEMBERS set01
1) "2"
2) "7"
192.168.1.66:6379> SMEMBERS set02
1) "z"
2) "y"
3) "x"
4) "1"

smove 移动值

192.168.1.66:6379> SMEMBERS set01 
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
192.168.1.66:6379> SMEMBERS set02 
1) "a"
2) "3"
3) "2"
4) "1"
5) "b"
192.168.1.66:6379> sdiff set01 set02
1) "4"
2) "5"
192.168.1.66:6379> sdiff set02 set01
1) "a"
2) "b"

sdiff 找出set01中比set02中多出的内容(差集)

192.168.1.66:6379> SMEMBERS set01 
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
192.168.1.66:6379> SMEMBERS set02 
1) "a"
2) "3"
3) "2"
4) "1"
5) "b"
192.168.1.66:6379> sdiff set01 set02
1) "4"
2) "5"
192.168.1.66:6379> sdiff set02 set01
1) "a"
2) "b"
192.168.1.66:6379> SINTER set01 set02
1) "1"
2) "2"
3) "3"
192.168.1.66:6379> SUNION set01 set02
1) "a"
2) "3"
3) "5"
4) "b"
5) "4"
6) "2"
7) "1"

SINTER 交集 SUNION 并集(去重)

万丈高楼平地起,肚子里要有货

学以致用,学在用前

Hash 哈希 (非常,及其重要,非常及其重要)

kv模式不变,但是v是一个键值对

192.168.1.66:6379> hset user id 11
(integer) 1
192.168.1.66:6379> hget user id
"11"
192.168.1.66:6379> keys *
1) "user"

hset hget基本使用

192.168.1.66:6379> hmset customer id 11 name li4 age 26
OK
192.168.1.66:6379> hmget customer id name age
1) "11"
2) "li4"
3) "26"

hmset hmget 的使用

192.168.1.66:6379> hgetall customer
1) "id"
2) "11"
3) "name"
4) "li4"
5) "age"
6) "26"

hgetall 获取全部的键值对数据

192.168.1.66:6379> hdel customer age
(integer) 1
192.168.1.66:6379> hgetall customer
1) "id"
2) "11"
3) "name"
4) "li4"

hdel 删除某个键值

192.168.1.66:6379> HLEN customer
(integer) 2
192.168.1.66:6379> HEXISTS customer id
(integer) 1
192.168.1.66:6379> HEXISTS customer email
(integer) 0

HLEN 查看长度,HEXISTS 查看是否存在

横向关联之后,其实发现没什么新技术,都是你抄我的,我抄你的

redis-cli -h 192.168.1.66 -a 123456

直接连接redis,密码也加入了,不需要再次密码验证了

192.168.1.66:6379> HKEYS customer
1) "id"
2) "name"
192.168.1.66:6379> HVALS customer
1) "11"
2) "li4"

HKEYS 获取共有多少个key,HVALS 获取值

192.168.1.66:6379> HVALS customer
1) "11"
2) "li4"
3) "18"
192.168.1.66:6379> HINCRBY customer age 2
(integer) 20
192.168.1.66:6379> HINCRBY customer age 2
(integer) 22
192.168.1.66:6379> HINCRBY customer age 2
(integer) 24
192.168.1.66:6379> HVALS customer
1) "11"
2) "li4"
3) "24"

HINCRBY 设置某个值增长

192.168.1.66:6379> hset customer score 92
(integer) 1
192.168.1.66:6379> HVALS customer
1) "11"
2) "li4"
3) "24"
4) "92"
192.168.1.66:6379> HINCRBYFLOAT customer score 0.5
"92.5"
192.168.1.66:6379> HVALS customer
1) "11"
2) "li4"
3) "24"
4) "92.5"

HINCRBYFLOAT 增加浮点数数值

ZSet(有序集合)

zset,在set的基础上加了一个score的值。

知识是基础,基础之上是业务,掌握知识,分析业务,开发项目。

192.168.1.66:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
(integer) 5
192.168.1.66:6379> ZRANGE zset01 0 -1 
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
192.168.1.66:6379> ZRANGE zset01 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"

zadd zrange

192.168.1.66:6379> ZRANGEBYSCORE zset01 60 90
1) "v1"
2) "v2"
3) "v3"
4) "v4"

ZRANGEBYSCORE 按分数范围查找

192.168.1.66:6379> ZRANGEBYSCORE zset01 60  (90
1) "v1"
2) "v2"
3) "v3"
192.168.1.66:6379> ZRANGEBYSCORE zset01 (60  (90
1) "v2"
2) "v3"
192.168.1.66:6379> ZREM zset01 v5
(integer) 1
192.168.1.66:6379> ZRANGE zset01 0 -1 
1) "v1"
2) "v2"
3) "v3"
4) "v4"

ZREM 删除某个元素

192.168.1.66:6379> zcard zset01
(integer) 4
192.168.1.66:6379> zcount zset01 60 80
(integer) 3
192.168.1.66:6379> zrank zset01 v4
(integer) 3
192.168.1.66:6379> zscore zset01 v4
"90"

zcard获取数量,zcount获取 范围数量,zrank获取key zscore 获取分数

192.168.1.66:6379> ZREVRANK zset01 v4
(integer) 0

ZREVRANK 逆序获取下标值

192.168.1.66:6379> ZRANGE zset01 0 -1 
1) "v1"
2) "v2"
3) "v3"
4) "v4"
192.168.1.66:6379> ZREVRANGE zset01 0 -1 
1) "v4"
2) "v3"
3) "v2"
4) "v1"

ZREVRANGE 逆序获取数据



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/8005290.html,如需转载请自行联系原作者

相关实践学习
基于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
相关文章
|
16天前
|
存储 NoSQL Redis
redis常见数据类型
Redis 是一种基于内存的键值存储数据库,支持字符串、哈希表、列表、集合及有序集合等多种数据类型,每种类型均有特定用途与适用场景,提供丰富的命令操作,适用于高速数据访问与处理。
31 5
|
1月前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
38 1
|
2月前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
41 1
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
29 3
|
3月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
66 2
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
NoSQL Java Redis
Redis5种数据类型
这篇文章介绍了Redis的五种数据类型:字符串、列表、集合、有序集合和哈希,并通过代码示例展示了如何在Spring框架中使用RedisTemplate操作这些数据类型。
Redis5种数据类型
|
4月前
|
存储 NoSQL Java
深入理解Redis数据类型Hashes原理
本文深入分析了Redis中的hashes数据类型,这是一种用于存储行记录的数据结构,允许一个key下存储多条记录。
深入理解Redis数据类型Hashes原理
|
4月前
|
存储 NoSQL 算法
深入理解Redis数据类型Zset原理
本文深入探讨了Redis中的Zset(有序集合)数据类型,它是一种可以存储排序功能的集合,其中每个元素都具有一个浮点型的score属性,用于根据score进行排序。
深入理解Redis数据类型Zset原理
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
下一篇
DataWorks