Redis的基本数据类型及常用命令

Redis通用命令

KEYS命令用于查找所有匹配给定模式 pattern 的 key 。生产环境下不建议使用KEYS命令,会影响效率。

匹配规则:

  • h?llo 匹配 hello, hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello and hallo, 不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, ... 不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo
  • 使用 \ 转义你想匹配的特殊字符。

通过KEYS命令返回的结果为数组。下面是Redis中keys命令的简单使用

# 创建一些 key 并赋值
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
# 查找含有 name 的 key
redis> KEYS *name*
1) "firstname"
2) "lastname"
# 查找以 a 为开头长度为 3 的 key
redis> KEYS a??
1) "age"
# redis 获取所有的 key 使用 *。
redis> KEYS *
1) "age"
2) "firstname"
3) "lastname"

DEL命令用于删除给定的一个或多个 key 。不存在的key会被忽略。

DEL语句返回值为被删除的数量,下面是del命令的简单使用

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> SET key3 "redis.com.cn"
"OK"
redis> DEL key1 key2 key3 key4
(integer) 3

EXISTS命令用于检查给定 key 是否存在。

从 Redis 3.0.3 起可以一次检查多个 key 是否存在。这种情况下,返回待检查 key 中存在的 key 的个数。

注意:如果相同的 key 在参数列表中出现了多次,它会被计算多次。所以,如果somekey存在, EXISTS somekey somekey 命令返回 2。

EXISTS命令基本语法如下:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

EXPIRE命令设置 key 的过期时间(seconds)。 设置的时间过期后,key 会被自动删除。

超时时间只能使用删除 key 或者覆盖 key 的命令清除,包括 DEL, SET, GETSET和所有的 *STORE 命令。 对于修改 key 中存储的值,而不是用新值替换旧值的命令,不会修改超时时间。例如,自增 key 中存储的值的 INCR, 向list中新增一个值 LPUSH, 或者修改 hash 域的值 HAST,这些都不会修改 key 的过期时间。

通过使用 PERSIST命令把 key 改回持久的 key,这样 key 的过期时间也可以被清除。

key使用 RENAME 改名后,过期时间被转移到新 key 上。

已经设置过期的key,可以调用 EXPIRE 重新设置。在这种情况下 key 的生存时间被更新为新值。

EXPIRE命令的返回值为两个整数1:设置成功,0:key不存在

EXPIRE 命令基本语法如下:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1

TTL命令以秒为单位返回 key 的剩余过期时间。用户客户端检查 key 还可以存在多久。

Redis 2.6 之前的版本如果 key 不存在或者 key 没有关联超时时间则返回 -1 。

Redis 2.8 起:

  • key 不存在返回 -2
  • key 存在但是没有关联超时时间返回 -1

PPTL命令返回以毫秒为单位的剩余超时时间。

该两种命令的返回值都是剩余超时秒数,失败返回负数如上。

Redis的数据类型

Redis中存在很多数据结构,常用的是以下五种:String,Hash,List,set,ScortSet

String字符串类型

根据字符串类型,又可以划分为三种:

  • string:普通字符串,比如说hello world
  • int:整数类型,可以进行自增,自减。比如说10
  • float:浮点类型,可以进行自增,自减。比如说10.1

不管是哪种类型,底层都是字节数组形式存储,只不过编码方式不同,对于纯数字的string类型,底层会采用二进制的方式存储,节省空间。字符串类型最大存储为512MB

常见命令如下

set key value

添加或修改指定的key值

get key

获取指定key值

mset key1 value1 key2 value2

批量添加多个String键值对

mget key1 key2

根据多个key获取多个value

incr key

让整型的key的值自增1

incrby key size

让整型的key的值自增并指定步长

incrbyfloat key size

让浮点型的key的值自增并指定步长

setnx key value

如果该key不存在,则添加,存在则不执行

setex key seconds value

添加键值对,并指定有效期

为了区分不同业务的存储地址,通常我们会拼接key,一般采用项目名:业务名:类型:id的格式


Hash类型

又叫散列,其value是一个无序字典,类似于Java种的HashMap结构。适合存储对象,因为可以对单个字段进行CURD,并且占用内存更少,如果采用String类型保存Java对象,需要进行序列化JSON形式的字符串,需要保存很多的{} ,: , "" 的符号,而Hash类型不需要保存这些多余的符号。

常用命令如下

hset key field value

将哈希表key中的字段field的值设置为value

hget key field

获取存储在哈希表中的指定字段

hmset key field1 value1 field2 value2

批量添加多个hash类型的key的field的值

hmget key field1 filed2

批量获取多个hash类型的key的field的值

hgetall key

获取在哈希表中指定key的所有字段和值

hdel key field

删除存储在哈希表中的指定字段

hkeys key

获取哈希表中的所有字段

hvals key

获取哈希表中的所有值

hincrby key field size

让一个hash类型的key的字段值自增并执行步长

hsetnx key field value

添加一个hash类型的key的field值,如果存在则不执行


List类型

Redis种的List类型与Java中的LinkedList类型,可以当作双向链表,既可以支持正向检索也可以支持反向检索。特征也与LinkedList类似

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常见命令如下

lpush key element[element2]

将一个或者多个值插入到列表头部

lpop key

移除并返回列表左侧第一个元素

rpush key element[element2]

将一个或多个值插入到列表尾部

rpop key

移除并返回列表右侧第一个元素

lrange key start end

获取列表指定范围元素

llen key

获取列表长度

brpop[blpop] key timeout

移除并获取列表的最后一个元素[列表第一个元素],如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止


Set类型

Redis的Set结构与Java中的HashSet类似,可以看作是一个value为null的HashMap。因为Set类型本身也是一个hash表,因此具备与HashSet类似的特征

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

常见命令

sadd key member1[member2]

向集合添加一个或多个元素

srem key member1 [member2]

移除集合中一个或多个元素

scard key

获取集合的元素个数

sismember key member

判断一个元素是否存在于Set

smembers key

返回集合中的所有元素

sinter key1[key2]

返回给定所有集合的交集

sunion key1 key2 [key3]

返回所有给定集合的并集

sdiff key1 key2 [key3]

返回给定所有集合的差集


ScortSet类型

Redis中的SortSet是一个可排序的Set集合,与Java中的TreeSet相似,但底层实现差别较大,TreeSet是基于红黑树实现,且需要自己编写排序逻辑,而ScoreSet是基于score属性对元素排序,底层实现是一个跳表加hash表。具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

常见命令如下

zadd key score1 member1[score2 member2]

向集合中添加一个或多个元素或者更新已经存在元素的分数

zrank[zrevrank] key member

获取集合中指定元素的排名[倒序排名]

zcard key

获取集合中的元素个数

zcount key min max

统计给定分数值之间的元素个数

zincrby key size member

集合指定的元素的分数自增,并指定增量

zrange key start end[withscores]

通过索引区间返回集合中指定排名范围的元素。如果添加了withscore连同分数一起展示

zrangebyscore key min max

通过score排序后,获取指定分数范围内的元素

zrem key member[member]

移除集合中的一个或多个元素

zdiff、zinter、zunion

求差集、交集、并集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium自动化测试实战案例

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…

8.4 Windows驱动开发:文件微过滤驱动入门

MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单,…

全网最牛最“刑”的Fiddler移动端抓包

本篇文章,博主想使用通俗易懂的话语,让大家明白以下内容: 什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包 抓包 包 (Packet) 是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。 我们平常…

[54] 螺旋矩阵 js

题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] * 输出:[1,2,3,6,9,8,7,4,5] 解题思路: 按照顺时针一行一列&#xff…

源码安装git

系统: Centos 由于系统自带的yum源仓库的git版本较低,所以在官网下载源码进行编译安装 官网地址:https://git-scm.com/ 源码下载地址:https://github.com/git/git 安装旧版本的git拉去git源码(如果是上传到服务器就不用…

无人机智慧工地:助力工地管理的未来之选

在现代工地管理中,无人机凭借其小巧、轻便和多角度拍摄等特点得到广泛应用,尤其在智慧工地的现场管理中发挥着重要作用。 一、无人机代替人工巡检省时省力 以往,施工现场检查主要依赖人工巡检方式,需要较长时间。而现在&#xff…

链表【2】

文章目录 🥝24. 两两交换链表中的节点🥑题目🌽算法原理🥬代码实现 🍎143. 重排链表🍒题目🍅算法原理🍓代码实现 🥝24. 两两交换链表中的节点 🥑题目 题目链接…

【LeetCode热题100】【哈希】最长连续序列

据说是字节跳动二面的原题,这题面试要是让我当场手撕,我直接当场去世T_T 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解…

KMP字符串

试题传送门:831. KMP字符串 给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模式串 P 在字符串 S 中多次作为子串出现。 求出模式串 P 在字符串 S 中所有出现的位置的起始下标。 输入格式 第一行输入…

Azure Machine Learning - Azure AI 搜索中的索引器

在 Azure AI 搜索中,搜索索引是可搜索的内容,可供搜索引擎用于索引编制、全文搜索和筛选后查询。 索引由架构定义并保存到搜索服务中,第二步是数据导入。 除了在主数据存储中,此内容也存在于搜索服务中,这是在新式应用…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班,打车较…

黑猫带你学eMMC协议第31篇:什么是eMMC的驱动强度(Drive Strength)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创侵权保护,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 简介 首先要清楚: 内阻越大,驱动强度越小;内阻越小,驱动强度越大。 ECSD[185]可调节…

【ARM CoreLink 系列 8.2 -- SMMU 详细介绍-STE Entry 详细介绍 2】

请阅读【ARM CoreLink 文章专栏导读】 上篇文章:【ARM CoreLink 系列 8.1 – SMMU 详细介绍-STE Entry 详细介绍 1】 文章目录 ARM SMMU STE ENTRY1.1 STE Entry WORD[3]1.1.1 MemAttr1.1.2 MTCFG1.1.3 ALLOCCFG1.1.4 SHCFG1.1.5 NSCFG1.1.6 PRIVCFG

todesk连接ubuntu显示当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能

ToDesk远程遇到的问题如上图,换向日葵直接黑屏; 问题原因 截止发文时间,Todesk只支持X11协议,没有适配最新的Wayland协议,所以我们需要把窗口系统调整为X11才可以。 解决方法 修改配置文件,关闭wayland su…

【模电】基本共射放大电路的工作原理及波形分析

基本共射放大电路的工作原理及波形分析 在上图所示的基本放大电路中,静态时的 I B Q I\tiny BQ IBQ、 I C Q I\tiny CQ ICQ、 U C E Q U\tiny CEQ UCEQ如下图( b )、( c )中虚线所标注。 ( a ) u i 的波形( b ) i B …

LeetCode:1038. 从二叉搜索树到更大和树(反向中序遍历 C++、Java)

目录 1038. 从二叉搜索树到更大和树 题目描述: 实现代码与解析: dfs 原理思路: 1038. 从二叉搜索树到更大和树 题目描述: 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所…

JDK8新特性——Stream流

文章目录 一、Stream流体验二、Stream流的创建三、Stream流中间方法四、Stream流终究方法 Stream流(也叫Stream API)。它是从JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的 一、Stream流体验 需求:有一个Lis…

linux远程桌面管理工具(xrdp)、向日葵

Windows远程桌面 linux远程桌面 使用向日葵远程桌面(手机端同理) Windows远程桌面 微软自带Remote Desktop Connection Manager (RDCMan)远程控制管理软件介绍 远程桌面连接管理器 v2.93 linux远程桌面 Windows远程桌面Ubunt…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

Android Framework 电池提醒相关Dialog熄屏消失的问题

记录一下花了三四天干一天就能完成的需求的傻事。 说在前头,这篇文章记录了电池提醒dialog相关,弹出dialog且熄屏再亮屏dialog不会消失的代码,这篇废话比较多,看正常代码直接跳到代码3。 故事背景 需求要求添加非法电池的弹窗&a…