当前位置: 首页 > news >正文

Redis不同数据类型下的基础查询命令

一、String数据类型

概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即看存储任何数据类型、比如数字、图片、序列化对象等

1.1、SET/GET/APPEND/STRLEN命令

PS:APPEND
APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

exists home             
#判断该键是否存在,存在返回1,否则返回0

append home "cat"     
#该键并不存在,因此append命令返回当前Value的长度

append home "dog"    
#该键已经存在,因此返回追加后Value的长度

get home               
#通过get命令获取该键,以判断append的结果

 1.2、INCR/DECR/INCRBY/DECRBY命令

INCR key:key值递增加1(key值必须为整数)
DECR key:key值递减1(key值必须为整数)

redis 127.0.0.1:6379> set mykey 20           #设置Key的值为20
OK
redis 127.0.0.1:6379> incr mykey             #该Key的值递增1
(integer) 21
redis 127.0.0.1:6379> decr mykey             #该Key的值递减1
(integer) 20
redis 127.0.0.1:6379> del mykey              #删除已有键。返回1说明删除成功
(integer) 1
redis 127.0.0.1:6379> decr mykey             #对空值执行递减操作,其原值被设定为0,递减后的值为-1
(integer) -1
redis 127.0.0.1:6379> del mykey
(integer) 1
redis 127.0.0.1:6379> incr mykey             #对空值执行递增操作,其原值被设定为0,递增后的值为1
(integer) 1
redis 127 .0.0.1:6379> set mykey hello       #将该键的Value设置为不能转换为整型的普通字符串。
OK
redis 127.0.0.1:6379> incr mykey
(error) ERR value is not an integer or out of range 
redis 127.0.0.1:6379> set mykey 10
OK
redis 127.0.0.1:6379> decrby mykey 5         #减少指定的整数
(integer) 5
redis 127.0.0.1:6379> incrby mykey 10        #增加指定的整数
(integer) 15

 1.3、GETSET命令

GETSET key value:获取key值并返回,同时给key设置新值

 redis 127.0.0.1:6379> incr mycounter      #将计数器的值原子性的递增1
(integer) 1
redis 127.0.0.1:6379> getset mycounter 0  #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的方式同时完成。
"1"
redis 127.0.0.1:6379> get mycounter       #查看设置后的结果。
"0" 

1.4、SETEX命令

setex key seconds value:设置指定key的过期时间为seconds

作用场景:

redis 127.0.0.1:6379> setex mykey 15 "hello"      #设置指定Key的过期时间为15秒。
redis 127.0.0.1:6379> ttl mykey                   #通过tt1命令查看指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。
(integer) 4
redis 127.0.0.1:6379> get mykey          #在该键的存活期内我们仍然可以获取到它的Value。
"hello"
redis 127.0.0.1:6379> ttl mykey          #该ttl命令的返回值显示,该Key已经过期。
(integer) -2
redis 127.0.0.1:6379> get mykey          #获取已过期的Key将返回nil
(nil)

 redis -1 往往代表的是一个上限,表示所有的意思 -2 表示的失效/过期

1.5、SETNX

SETNX key value:不存在键的话执行set操作,存在的话不执行

redis 127 .0.0.1:6379> del mykey              #删除该键,以便于下面的测试验证。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "hello"     #该键并不存在,因此setnx命令执行成功。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "world"     #该键已经存在,因此本次设置没有产生任何效果。
(integer) 0
redis 127 .0.0.1:6379> get mykey              #从结果可以看出,返回的值仍为第一次设置的值。
"hello"

1.6、MSET/MGET/MSETNX:

MSET key value [key value …]:批量设置键-值对
MGET key [key …]:批量获取键值对
MSETNX key value [key value …]:批量设置键-值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0

redis 127.0.0.1:6379> mset key1 "hello" key2 "world" #批量设置了key1和key2两个键。 redis 127.0.0.1:6379> mget key1 key2 #批量获取了key1和key2两个键的值。

1) "hello"

2) "world"

redis 127.0.0.1:6379> msetnx key3 "zhang" key4 "san" #批量设置了key3和key4两个键,因为之前他们并不存在,所以msetnx命令执行成功并返回1。

(integer) 1

redis 127.0.0.1:6379> mget key3 key4

1) "zhang"

2) "san"

redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" #批量设置了key3和key5两个键,但是key3已经存在,所以msetnx命令执行失败并返回0。

(integer) 0

redis 127.0.0.1:6379> mget key3 key5 #批量获取key3和key5,由于key5没有设置成功,所以返回nil

1) "zhang"

2) (nil)

 二、List数据类型

概述:列表的元素类型为String,按照插入顺序排序,在列表的头部和尾部添加元素

2.1、LPUSH/LPUSHX/ LRANGE命令

LPUSH key value [value …]在头部(左侧)依次插入列表元素 
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量
LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)

redis 127.0.0.1:6379> lpush mykey a b c d #mykey键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入。

(integer) 4

redis 127.0.0.1:6379> lrange mykey 0 2 #取从位置0开始到位置2结束的3个元素。

1) "d"

2) "c"

3) "b"

redis 127.0.0.1:6379> lrange mykey 0 -1 #取链表中的全部元素,其中0表示第一个元素,-1表示最后一一个元素。

1) "d"

2) "c"

3) "b"

4) "a"

redis 127.0.0.1:6379> lpushx mykey2 e #mykey2键此时并不存在,因此lpushx命令将不会进行任何操作,其返回值为0。

(integer) 0

redis 127.0.0.1:6379> lrange mykey2 0 -1 #可以看到mykey2没有关联任何List Value。 (empty list or set)

redis 127.0.0.1:6379> lpushx mykey e #mykey键此时已经存在,所以lpushx命令插入成功,并返回链表中当前元素的数量。

(integer) 5

redis 127.0.0.1:6379> lrange mykey 0 0 #获取该键的List Value的头部元素。

1) "e"

2.2、 LREM/LSET/LINDEX/LTRIM命令

LREM key count value:从头部开始删除count个值为value的元素,并返回实际删除数量
LSET key index value:将位置索引为index的元素设置新值value
LINDEX key index:获取索引为index的元素
LTRIM key start stop:仅保留从位置索引start到索引stop的元素

redis 127.0.0.1:6379> lpush mykey a b c d a c #为后面的示例准备测试数据。

(integer) 6

redis 127.0.0.1:6379> lrem mykey 2 a #从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。

(integer) 2

redis127.0.0.1:6379>lrange mykey 0 -1 #看出删除后链表中的全部元素。

1) "c"

2) "d"

3) "c"

4) "b"

redis 127.0.0.1:6379> lindex mykey 1 #获取索引值为1(头部的第二个元素)的元素值。

"d"

redis 127.0.0.1:6379> lset mykey 1 e #将索引值为1(头部的第二个元素)的元素值设置为新值e。

OK

redis 127.0.0.1:6379> lindex mykey 1 #查看是否设置成功。

"e"

redis 127.0.0.1:6379> lindex mykey 6 #索引值6超过了链表中元素的数量,该命令返回nil。

(nil)

redis 127.0.0.1:6379> lset mykey 6 hh #设置的索引值6超过了链表中元素的数量,设置失败,该命令返回错误信息。

(error) ERR index out of range

redis 127 .0.0.1:6379> ltrim mykey 0 2 #仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留。

OK

redis 127.0.0.1:6379> lrange mykey 0 -1 #查看ltrim后的结果。

1) "c"

2) "e"

3) "c"

 2.3、LINSERT命令

=======未完待续===========

相关文章:

  • Python调用OpenCV接口实现网络摄像头录像和抓拍图片
  • 吴恩达2022机器学习——第二部分高级学习算法第二周笔记
  • WEB自动化测试(6)—— 命令行运行Cypress
  • 最全最简洁的gitlab代码提交流程
  • 顶象无感验证为十八数藏“加固城墙”
  • SkyLight 添加LightingChannelMask功能
  • CNN李宏毅
  • 为什么选择微服务架构? 微服务架构的10个核心优势 总结
  • 【数据结构与算法】初识二叉树(上)
  • Linux系统运行时参数命令
  • 服装商城网站 毕业设计-附源码241505
  • Qt5开发从入门到精通——第九篇二节( Qt5 文件及磁盘处理—— 读写二进制文件)
  • ubuntu配置java环境jdk
  • 10项支持措施!武汉东湖新技术开发区打造中部地区风投创投中心奖励补贴政策解读
  • 八、PL/SQL 记录
  • [译]如何构建服务器端web组件,为何要构建?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • es6
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • quasar-framework cnodejs社区
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • SQL 难点解决:记录的引用
  • ucore操作系统实验笔记 - 重新理解中断
  • 动态魔术使用DBMS_SQL
  • 多线程事务回滚
  • 关于List、List?、ListObject的区别
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聊聊sentinel的DegradeSlot
  • 三栏布局总结
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 深度学习在携程攻略社区的应用
  • 硬币翻转问题,区间操作
  • 用quicker-worker.js轻松跑一个大数据遍历
  • HanLP分词命名实体提取详解
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (C语言)fgets与fputs函数详解
  • (分布式缓存)Redis分片集群
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)认识微服务
  • (转)VC++中ondraw在什么时候调用的
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .Net 4.0并行库实用性演练
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net FrameWork总结
  • .NET 回调、接口回调、 委托
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET连接数据库方式
  • .sys文件乱码_python vscode输出乱码
  • @EnableAsync和@Async开始异步任务支持
  • @RequestParam,@RequestBody和@PathVariable 区别