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

相关文章

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

Spring Integration Redis 使用示例详解

《SpringIntegrationRedis使用示例详解》本文给大家介绍SpringIntegrationRedis的配置与使用,涵盖依赖添加、Redis连接设置、分布式锁实现、消息通道配置及... 目录一、依赖配置1.1 Maven 依赖1.2 Gradle 依赖二、Redis 连接配置2.1 配置 R