Redis青铜修炼手册(二) --- Redis5大数据类型常用命令

2023-11-07 01:31

本文主要是介绍Redis青铜修炼手册(二) --- Redis5大数据类型常用命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redis青铜修炼手册(一) — NoSQL&&Redis介绍

前面提到Redis支持五中数据类型。String、List、Hash、Set、Zset。本文主要介绍操作这五种数据类型的一些命令,以及其他常用命令

需要说明的是,Redis中,键的数据类型必须是字符串

String

  • set key value [EX seconds] [PX milliseconds] [NX|XX]

如果key不存在,创建value,如果key存在则value覆盖旧值

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
EX:设置key的过期时间,单位秒。等同于setex key

通过ttl查看还有多少秒过期,返回-1 表示永不过期。-2 表示已过期。

127.0.0.1:6379> set hello world ex 5
OK
127.0.0.1:6379> get hello
"world"
// 通过ttl查看剩余失效时间,单位秒。
127.0.0.1:6379> ttl hello
(integer) 1// 等同于
127.0.0.1:6379> setex hello 5 world
OK
127.0.0.1:6379> get hello
"world"
PX:设置key的过期时间,单位毫。等同于psetex key milliseconds value 进行保存
127.0.0.1:6379> set hello world px 5000
OK
127.0.0.1:6379> get hello
"world"// 等同于
127.0.0.1:6379> psetex hello 5000 world
OK
127.0.0.1:6379> get hello
"world"
//查看剩余失效毫秒数
127.0.0.1:6379> pttl hello
(integer) 2516
NX(not exist):只有再key不存在时,才可以设置key的值,

等同于setnx key value

XX:只有key存在时,才可以设置key的值
// 因为键hello,已经存在,所以通过nx设置值 wrold1无效
127.0.0.1:6379> set hello world1 nx
(nil)
127.0.0.1:6379> get hello
"world"//因为键hello存在 所以通过xx设置值world1 成功
127.0.0.1:6379> set hello world1 xx
OK
127.0.0.1:6379> get hello
"world1"
  • GETSET key value

插入新值,返回旧值,如果该key之前不存在,返回nil

# key1 插入值value1 ,因为key1之前不存在所以返回nil
127.0.0.1:6379> GETSET key1 value1
(nil)
127.0.0.1:6379> GETSET key1 value2
"value1"
  • STRLEN key 返回键对应的值的长度,key不存在的时候返回0 且 只适用于value是字符串的时候。
127.0.0.1:6379> set len abcd
OK
127.0.0.1:6379> STRLEN len
(integer) 4
  • GETRANGE key start end

获取指定区间范围内的值,闭区间

127.0.0.1:6379> set key abc123
OK
// 从0 开始 到末尾结束
127.0.0.1:6379> GETRANGE key 0 -1
"abc123"
// 从0 开始 第二个元素结束。
127.0.0.1:6379> GETRANGE key 0 2
"abc"
  • SETRANGE key offset value

设置指定区间范围内的值,替换对应长度的字符

127.0.0.1:6379> get key
"abc123"
// 从第一个元素开始一次替换成kkk
127.0.0.1:6379> SETRANGE key 1 kkk
(integer) 6
127.0.0.1:6379> get key
"akkk23"

设置、获取多个key、v

127.0.0.1:6379> mset key1 a key2 b
OK127.0.0.1:6379> MGET key1 key2
1) "a"
2) "b"
  • APPEND key value

在key的值后面追加value,如果key不存在,赋值value给key。返回值的长度

127.0.0.1:6379> get append
(nil)
127.0.0.1:6379> APPEND append hello
(integer) 5
127.0.0.1:6379> get append
"hello"
127.0.0.1:6379> APPEND append  world
(integer) 10
127.0.0.1:6379> get append
"helloworld"
  • INCR key

如果值为数字,则+1,返回+1 之后的结果。
如果key不存在,则默认为0,然后+1。
如果值不是数字,则返回错误

  • DECR key

和INCR唯一的区别就是 -1
计数器场景中常用。

127.0.0.1:6379> get num
(nil)
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> set num1 10
OK
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> DECR decrnum
(integer) -1
127.0.0.1:6379> set decrnum 10
OK
127.0.0.1:6379> decr decrnum
(integer) 9
127.0.0.1:6379> decr decrnum
(integer) 8
  • INCRBY key increment

为key增加一定的值,increment为增量
同理 DECRBY key decrement,为key减少一定的量

INCRBY key increment  
为key增加一定的值,increment为增量
同理 DECRBY key decrement,为key减少一定的量
  • DEL key [key …] 删除key
127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> set key2 def
OK
127.0.0.1:6379> del key1 key2
(integer) 2
127.0.0.1:6379> get key1
(nil)
// 判断key2 是否存在,不存在返回0
127.0.0.1:6379> EXISTS key2
(integer) 0

HASH

hash是一个键值对集合。是一个string类型的field和value的映射表。hash可以看做是java中的map<String,Object>。一个 hash 可以存储 2的32次方 - 1个 键值对(40多亿)。

  • HSET key field value

这里的field、value就是字典中的k,v
===>> HSET key value(key value)

插入一条student对象 name。 为codeMan的数据。
创建field成功则返回1.否则返回0

127.0.0.1:6379> HSET student name codeMan
(integer) 1
127.0.0.1:6379> HGET student name
"codeMan"
127.0.0.1:6379> HSET student name codeGirl
(integer) 0
127.0.0.1:6379> HGET student name
"codeGirl"
  • HSETNX key field value 只有当field不存在时,才会生效。
127.0.0.1:6379> HSET student age 13
(integer) 1
// key:student 中的field(age) 已存在,所以返回0
127.0.0.1:6379> HSETNX student age 13
(integer) 0
// 通过HDEL删除field
127.0.0.1:6379> HDEL student age
(integer) 1
// field 不存在 返回1
127.0.0.1:6379> HSETNX student age 13
(integer) 1
127.0.0.1:6379> HGET student age
"13"
// HEXISTS查看是否存在 field 。如果存在返回1.不存在返回0
127.0.0.1:6379> HEXISTS student age
(integer) 1
  • HLEN key 查看key的长度,元素个数
// 返回2 分别是name 和age 两个field
127.0.0.1:6379> HLEN student
(integer) 2
// 通过hkeys 查看key中的field
127.0.0.1:6379> HKEYS student
1) "name"
2) "age"
  • HSTRLEN key field 查看field的长度
127.0.0.1:6379> HGET student name
"codeGirl"
127.0.0.1:6379> HSTRLEN student name
(integer) 8
  • HINCRBY key field increment 对field 增加increment。field对应的值必须为数字
127.0.0.1:6379> HGET student age
"13"
127.0.0.1:6379> HINCRBY student age 5
(integer) 18
127.0.0.1:6379> HGET student age
"18"

如果field已存在则进行修改,不存在则创建

127.0.0.1:6379> HMGET student name age
1) "codeGirl"
2) "18"
127.0.0.1:6379> HMSET student sex girl name codeMM age 23
OK
127.0.0.1:6379> HMGET student name age sex
1) "code"
2) "23"
3) "girl"
// hvals 返回所有field的值
127.0.0.1:6379> HVALS student
1) "code"
2) "23"
3) "girl"
// 先返回所有field,再返回对应的值
127.0.0.1:6379> HGETALL student
1) "name"
2) "code"
3) "age"
4) "23"
5) "sex"
6) "girl"

LIST

用于存放列表,单值多value

向key中插入一个列表。列表顺序与插入顺序一致。返回插入的元素个数

127.0.0.1:6379> lpush code python java golang ruby
(integer) 4
127.0.0.1:6379> rpush code1 python java golang ruby
(integer) 4
127.0.0.1:6379> LRANGE code 0 -1
1) "ruby"
2) "golang"
3) "java"
4) "python"
127.0.0.1:6379> LRANGE code1 0 -2
1) "python"
2) "java"
3) "golang"
127.0.0.1:6379> LRANGE code 0 -1
1) "ruby"
2) "golang"
3) "java"
4) "python"
127.0.0.1:6379> lpop code
"ruby"
127.0.0.1:6379> rpop code
"python"// z再次查看已经被移除  
127.0.0.1:6379> LRANGE code 0 -1
1) "golang"
2) "java"
  • LINDEX key index 查看第index个元素
//查看第二个元素
127.0.0.1:6379> LINDEX code 1
"java"
127.0.0.1:6379> LINDEX code 0
"golang"
// 存储abbbbc
127.0.0.1:6379> lpush word a b b b b c
(integer) 6127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
3) "b"
4) "b"
5) "b"
6) "a"
// 删除3个b元素
127.0.0.1:6379> LREM word 3 b
(integer) 3
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
3) "a"// 截取0 到1个元素 重新赋值给word
127.0.0.1:6379> LTRIM word 0 1
OK
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
  • RPOPLPUSH source destination 从source中取出最右边的元素,并返回。放到destination的头部
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
2) "b"
127.0.0.1:6379> LRANGE word1 0 -1
1) "q"
2) "p"
3) "o"
// 返回word最右边的元素
127.0.0.1:6379> RPOPLPUSH word word1
"b"
127.0.0.1:6379> LRANGE word1 0 -1
1) "b"
2) "q"
3) "p"
4) "o"
  • LINSERT key BEFORE|AFTER pivot value 在最左边的pivot的前面(befor)或者后面(after) 插入value。如果pivot不存在,返回-1 不执行任何操作。
127.0.0.1:6379> LRANGE word 0 -1
1) "c"
// 在c的左边添加a
127.0.0.1:6379> LINSERT word before c a
(integer) 2127.0.0.1:6379> LRANGE word 0 -1
1) "a"
2) "c"

SET

  • SADD key member [member …]

像key中添加一个或多个 member。有重复元素 自动跳过。最终返回的是实际元素的个数

  • SMEMBERS key 查看元素的内容

127.0.0.1:6379> SADD set a a b
(integer) 2// 实际元素为b a
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
  • SISMEMBER key member 查看member 是否是key中的成员.

是返回1, 不是返回0

127.0.0.1:6379> SISMEMBER set a
(integer) 1
127.0.0.1:6379> SISMEMBER set c
(integer) 0
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
127.0.0.1:6379> SRANDMEMBER set
"b"
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
127.0.0.1:6379> SPOP set
"b"
127.0.0.1:6379> SMEMBERS set
1) "a"
  • SREM key member [member …]

移除集合中一个或多个元素.返回移除元素的个数。

127.0.0.1:6379> SADD code java python c
(integer) 3
127.0.0.1:6379> SREM code java c
(integer) 2
127.0.0.1:6379> SMEMBERS code
1) "python"
  • SMOVE source destination member

将source中的member元素移动到destination
如果source总不存在member 则不执行任何操作
如果destination 已经存在member,则只是从source中移除member元素。destination 保持不变

127.0.0.1:6379> SADD word1 a b c d
(integer) 4
127.0.0.1:6379> SADD word2 j k l
(integer) 3
127.0.0.1:6379> SMOVE word1 word2 a
(integer) 1
127.0.0.1:6379> SMEMBERS word2
1) "a"
2) "l"
3) "k"
4) "j"
127.0.0.1:6379> SMOVE word1 word2 u
(integer) 0
// scard key 返回元素个数
127.0.0.1:6379> SCARD word2
(integer) 4
  • SINTER key [key …]

一个key时,返回key的内容
多个key时,返回他们的交集

127.0.0.1:6379> SADD group1 a b c
(integer) 3
127.0.0.1:6379> SADD group2 c f g
(integer) 3
127.0.0.1:6379> SINTER group1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> SINTER group1 group2
1) "c"

ZSET

将member及其score(排序分数)插入到有序列表中,如果已经存在member则更新其score。并重新调整其位置

127.0.0.1:6379> ZADD net 1 google.cn 2 biying.com 3 baidu.com
(integer) 3
127.0.0.1:6379> ZRANGE net 0 -1
1) "google.cn"
2) "biying.com"
3) "baidu.com"
127.0.0.1:6379> ZSCORE net google.cn
"1"
127.0.0.1:6379>
127.0.0.1:6379> ZCOUNT net 0 2
(integer) 2
127.0.0.1:6379> ZRANGE net 0 2
1) "google.cn"
2) "biying.com"
3) "baidu.com"
127.0.0.1:6379> ZRANGE net 0 1
1) "google.cn"
2) "biying.com"
127.0.0.1:6379> ZREVRANGE net 0 1
1) "baidu.com"
2) "biying.com"
127.0.0.1:6379> ZREVRANGE net 0 -1
1) "baidu.com"
2) "biying.com"
3) "google.cn"

欢迎关注公众号"程序员共成长", 公众号内回复【获取资源】领取程序员专属礼包!!!

在这里插入图片描述

这篇关于Redis青铜修炼手册(二) --- Redis5大数据类型常用命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/360335

相关文章

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L