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中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数