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连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制