redis的常见命令

news2024/7/6 19:40:49

Redis 所有的 key(键)都是字符串。在谈基础数据结构时,我们讨论的是存储值的数据类型,主要包括常见的 5 种数据类型,分别是:String、List、Set、Zset、Hash

数据结构介绍
Redis 是一个 key-value 的数据库,key 是一般的 String,不过 value 却是多种多样的:
在这里插入图片描述

结构类型结构存储的值结构的读写能力
String 字符串可以是字符串、整数或浮点数对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作
List 列表一个链表,链表上的每个节点都包含一个字符串对链表的两端进行 push 和 pop 操作,读取单个或多个元素;根据值查找或删除元素
Set 集合包含字符串的无序集合字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等
Hash 散列包含键值对的无序散列表包含方法有添加、获取、删除单个元素
Zset 有序集合和散列一样,用于存储键值对字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素

通用命令

  • KEYS pattern:查看复合模版的所有 keys, 不建议在生产坏境下使用

  • DEL key:删除一个指定的 key

  • EXISTS key:判断 key 是否存在

  • EXPIRE key seconds:给一个 key 设置过期时间 单位是秒

  • TTL key:查看指定 key 的剩余有效时间 。-1 表示当前 key 没有设置有效时间 ,-2 表示当前 key 不存在

  • PERSIST key:持久化 指定 key

  • TYPE key:查看指定 key 的类型

  • MOVE key num:移动指定 key 到指定数据库

  • RANDOMKEY:随即返回库中的一个 key

String 字符串命令

String 类型是 Redis 基本类型,一个键最大能存储 512MB 且是二进制安全的。意思是 redis 的 String 类型可以存储任何数据,如数字,字符串,jpg 图片或者序列化的对象。

原理
redis 中的 String 是动态字符串,内部结构类似 ArrayList。采用预分配冗余空间的方式减少内存的频繁分配。
内部为字符串分配的实际空间一般高于字符串长度,当字符串长度 <1MB 时,扩容方式是加倍 也就是原来的两倍。当字符串长度> 1MB 时,一次扩容 1MB,直到最大 512MB.

命令简述使用
GET获取存储在给定键中的值GET key
MGET获取多个存储在给定键中的值MGET key1 key2
SET设置存储在给定键中的值SET key value
MSET设置多个存储在给定键中的值MSET key1 value1 key2 value2
SETNX如果不存在即设置值SETNX key value
SETEX设置值的同时设置过期时间SETNX key seconds value
DEL删除存储在给定键中的值DEL key
INCR将键存储的值加 1INCR key
DECR将键存储的值减 1DECR key
INCRBY将键存储的值加上整数INCRBY key amount
DECRBY将键存储的值减去整数DECRBY key amount
APEEND字符串后添加内容APEEND key value
STRLEN获取字符串长度STRLEN ke
GETRANGE获取字符串指定索引范围的内容GETRANGE key start end
SETRANGE设置字符串指定偏移量开始处插入值SETRANGE key offset value

实战场景

  • 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到 redis 中,redis 作为缓存层,mysql 做持久化层,降低 mysql 的读写压力。
  • 计数器:redis 是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
  • session:常见方案 spring session + redis 实现 session 共享

List 链表命令

redis 的列表是一个字符链表,内部结构类似 LinkedList。left,right
都可以添加。如果键不在,则创建新链表,如果已存在则新填内容。如果当前链表没有值,则该链表也会自动删除。redis 的列表最多可存储
2^32-1 个元素(4294967295,每个列表可以存储 40 多亿个元素)

原理
底层是一个快速链表(quickList)的结构,在列表元素较少时,使用内存存储压缩列表 ziplist。当元素数量较多时,改成 quickList,也就是将多个 zipList 串起来使用,以减少内存的碎片化。

命令简述使用
RPUSH将给定值推入到列表右端RPUSH key value
LPUSH将给定值推入到列表左端LPUSH key value
RPOP从列表的右端弹出一个值,并返回被弹出的值RPOP key
LPOP从列表的左端弹出一个值,并返回被弹出的值LPOP key
LRANGE获取列表在给定范围上的所有值LRANGE key 0 -1
LINDEX通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。LINDEX key index
LINSERT在某一个旧元素值的前边或后边插入一个新的值linsert key before/after old_value new_value
LLEN过去链表长度llen key
LTRIM截取 list 从 stater 到 end 位置的值并保留ltrim key start end
LREM删除 count 个元素值为 value 的元素lrem key count value
LSET修改索引号为 index 的元素的值为 valueLSET key index value

使用列表的技巧

  • Stack (栈) : lpush+lpop
  • Queue(队列): lpush+rpop
  • Capped Collection(有限集合): lpush+ltrim
  • Message Queue(消息队列): lpush+brpop

Set 集合命令

redis 的集合是 String 类型的无序不重复的元素集,同时提供交集、并集、差集等操作,集合中最大的成员数为 2^32-1(40
多亿)。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O (1)。

原理
​类似 HashSet, 也是通过哈希表实现的,相当于所有的 value 都为空。通过计算 hash 的方式来快速排重,也是 set 能提供判断一个成员是否在集合内的原因。

命令使用

命令简述使用
SADD向集合添加一个或多个成员SADD key value
SPOP随机弹出 count 个 memberSPOP key [count]
SREM删除 set 集合中的 memberSREMkey member [member…]
SCARD获取集合的成员数SCARD key
SMEMBERS返回集合中的所有成员SMEMBERS key member
SISMEMBER判断 member 元素是否是集合 key 的成员SISMEMBER key member
SRANDMEMBER随机返回 count 个成员SRANDMEMBER key count
SMOVE移动 source 中的成员 member 到 destination 中SMOVE sourse destination member
SDIFF返回 key1 与 key2 的差集SDIFF key1 key2 [key3…]
SINTER返回 key1 与 key2 的交集SINTER key1 key2 [key3…]
SUNION返回 key1 与 key2 的交集SUNION key1 key2 [key3…]

Hash 散列命令

redis 中的无序字典是一个 String 类型的 field 和 value 的映射表,内部结构类似 HashMap,每个 hash
可以存储 2^32-1 个键值对(40 多亿)

原理
底层的实现结构,与 HashMap 一样,是 “数组 + 链表” 的二维结构,第一维 hash 的数据位置碰撞时,将碰撞元素用链表串接起来,不同的是,redis 字典的值只能是字符串,而且两者的 rehash 方式不同。java 的 hashmap 是一次全部 rehash,耗时较高,redis 为了提高性能,采用渐进式 rehash 策略。具体方式为,同时保留新旧两个 hash 结构,然后逐步搬迁,最后取代

命令使用

命令简述使用
HSET(HMSET,HSETNX)添加键值对HSET hash-key sub-key1 value1
HGET(HMGET)获取指定散列键的值HGET hash-key key1
HGETALL获取散列中包含的所有键值对HGETALL hash-key
HDEL如果给定键存在于散列中,那么就移除这个键HDEL hash-key sub-key1
HKEYS获取散列中包含的所有键HKEYS hash-key
HVALS获取散列中包含的所有值HVALS hash-key
HEXISTS判断 hash 中是否存在 field 值HEXISTS key field

Zset 有序集合命令

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double
类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数是可以重复的。

原理

压缩列表 (ziplist): ziplist 是为了提高存储效率而设计的一种特殊编码的双向链表。它可以存储字符串或者整数,存储整数时是采用整数的二进制而不是字符串形式存储。它能在 O (1) 的时间复杂度下完成 list 两端的 push 和 pop 操作。但是因为每次操作都需要重新分配 ziplist 的内存,所以实际复杂度和 ziplist 的内存使用量相关

跳跃表(zSkiplist): 跳跃表的性能可以保证在查找,删除,添加等操作的时候在对数期望时间内完成,这个性能是可以和平衡树来相比较的,而且在实现方面比平衡树要优雅,这是采用跳跃表的主要原因。跳跃表的复杂度是 O (log (n))。

命令使用

命令简述使用
ZADD将一个带有给定分值的成员添加到有序集合里面ZADD zset-key 178 member1
ZRANGE(zrevrange)根据元素在有序集合中所处的位置,从有序集合中获取多个元素ZRANGE zset-key 0-1 withccores
ZREM如果给定元素成员存在于有序集合中,那么就移除这个元素ZREM zset-key member1
zrangebyscore(zrevrangebyscore)获取指定范围内分数的所有成员 (升序) withscores 表示带上分数,limit 表示分页zrangebyscore key min max [withscores] [limit offset count]
zcard获取 zset 成员个数ZADD zset-key 178 member1
zcount获取 zset 在指定分数范围内的成员个数,“(” 左括号表示闭区间zcount key min max
zrank(zrevrank)获取 zset 中成员 member 的排名(升序)zrank key member

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

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

相关文章

Java基础漏洞(一)

最近在复习一些Java基础&#xff0c;填补自己的知识漏洞。 1.转义字符 (1)\t代表的是制表符&#xff0c;\n代表的是空格&#xff0c;\r则代表的是回车 public class Main{public static void main(String[] args) {System.out.println("年龄\t性别\t身高\n18\t男\t183&…

《小猫猫大课堂》4——数组,操作符,常见关键字

更新不易&#xff0c;麻烦多多点赞&#xff0c;欢迎你的提问&#xff0c;感谢你的转发&#xff0c; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我…

十三、网络编程、UDP、TCP协议

JMM(了解) JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下&#xff0c;内存的访问有一定的差异&#xff0c;所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异&#…

python 办公自动后,第一天:创建excel写入数据

1&#xff0c;python第三方模块&#xff1a;xlwt写入excel文件 #pycharm 中安装pip install xlwt #xlwr 用户写入文件模块 #pip install xlwt # pip list 查看安装的模块 # pip install import xlwt#创建excelwb xlwt.Workbook()# 选择工作簿sh wb.add_sheet(第一个sheet页…

LVGL学习笔记11 - 按钮矩阵Button Matrix

目录 1. 构造矩阵 2. Parts 2.1 LV_PART_MAIN 2.2 LV_PART_ITEMS 3. 样式 3.1 按钮大小 3.2 间距 3.3 控制按钮 3.4 控制map 3.5 Check唯一性 4. 事件 4.1 LV_EVENT_VALUE_CHANGED 4.2 LV_EVENT_LONG_PRESSED 4.3 LV_EVENT_DRAW_PART_BEGIN 按钮矩阵是多个按钮的组…

臻图信息搭建土壤墒情监测应用平台,推进现代农业信息化发展

“十四五”期间&#xff0c;国家高度重视土壤生态环境监测等问题&#xff0c;先后出台了一系列规范性文件&#xff0c;为我国土壤防治领域建立了一套标准、导则、指南和管理等解决对策&#xff0c;使我国土壤修复法律法规和标准化建设呈现出系列化和系统化趋势&#xff0c;有效…

计算机视觉实战-----pytorch官方demo(Lenet网络)实现

系列文章目录 文章目录系列文章目录前言零、环境搭建一、下载CIFAR10数据集二、测试图片三、模型搭建四、开始train五、测试六、tensorboard可视化总结前言 通过一个官方列子&#xff0c;清楚深度学习中图像的训练的整个流程 零、环境搭建 pycharm下载&#xff1a;pycharm官网…

【C语言】算法好题初阶(每日小细节010)

1.存在重复元素 力扣传送门、 这道题目的解题思路就是先排序然后比较相邻元素是不是有相等的&#xff0c;有就是true否者false 排序的算法比较多大&#xff0c;但是我用插入和快排plus版都没有过... 但是非递归的归并过了&#xff0c;对排序算法感兴趣的小伙伴可以去看我的博…

一款统计摸鱼时长的开源项目

对于我们程序员&#xff0c;在工作中一天8小时&#xff0c;不可能完全在写代码了&#xff0c;累了刷刷论坛、群里吹吹牛&#xff0c;这都是非常正常的。虽然一天下来&#xff0c;可能我们都可以按时完成工作&#xff0c;但是我们不知道&#xff0c;时间都花在哪里了&#xff0c…

小米万兆路由器里的Docker安装MySQL8.0

小米2022年12月份发布了万兆路由器&#xff0c;里面可以使用Docker。 今天尝试在小米的万兆路由器里安装MySQL8.0。 准备工作 请参考https://engchina.blog.csdn.net/article/details/128515422的准备工作。 创建存储 请参考https://engchina.blog.csdn.net/article/detail…

Faster RCNN网络源码解读(Ⅹ) --- FastRCNN部分正负样本采样及FastRCNN部分损失计算

目录 一、回顾以及本篇博客内容概述 二、代码解析 2.1 ROIHeads类&#xff08;承接上篇博客的2.5节&#xff09; 2.1.1 初始化函数 __init__回顾 2.1.2 正向传播forward回顾 2.1.3 select_training_samples 2.1.4 add_gt_proposals 2.1.5 assign_targets_to_proposals…

【Git】Git瘦身,清理Git历史提交/.git大文件清理(云效、UI 自动化项目)

目前项目是存在云效(codeup.aliyun.com)上 本地清理后&#xff0c;还需要到云效上清理「存储空间管理」 一、清理/瘦身效果二、到底是什么在占空间&#xff1f;1、先看一下项目里&#xff0c;什么最占空间&#xff1f;2、往下看在/.git里&#xff0c;什么最占空间&#xff1f;三…

车载诊断协议UDS——读取故障服务Service 19

汽车控制器诊断功能,可以通过诊断服务读取车内控制器故障信息。如本文所分享的内容,通过Service 19服务读取车内控制器故障信息。 一、DTC显示类型 在OEM定义的诊断需求规范中,会定义DTC(诊断故障码)与具体控制器具体故障类型相关联(一个DTC故障码对应一个具体故障)…

深度学习目标检测_YOLOV2超详细解读

文章目录YOLO v2概述Batch Normalization&#xff08;批归一化&#xff09;High Resolution Classifier&#xff08;高分辨率预训练分类网络&#xff09;New Network&#xff1a;Darknet-19神经网络中的filter &#xff08;滤波器&#xff09;与kernel&#xff08;内核&#xf…

【Java语言】— 循环结构:while循环、do-while循环

while循环 1.while循环格式与执行流程 while循环格式 初始化语句; while (循环条件){循环体语句(被重复执行的代码);迭代语句; }示例&#xff1a; inti 0; while (i < 3){System.out.println("Hello World");i; }while循环执行流程 什么时候用for循环&#x…

蓝桥杯寒假集训第五天(子串分值和)

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 输入一个字符串&#xff0c;然后计算所有连续子串中没有重复字母的个数 输入描述&#xff1a; 第一行&#xff1a; 一个字符串 输出描述&#xff1a; 所有子串中没有…

软件设计模式---结构型模式

结构型模式 结构型模式概述 结构型模式描述如何将类或者对象结合在一起形成更大的结构&#xff0c;就像搭积木&#xff0c;可以通过简单积木组合形成复杂的、功能更更为强大的结构 结构型模式可以分为类结构型模式和对象结构型模式 类结构型模式关心类的组合&#xff0c;由多…

1、Java多线程技能基础

文章目录第一章 Java多线程技能1.1进程和线程的定义以及多线程的优点1.2 使用多线程1.2.1继承Thread类1.2.2常见的3个命令分析线程的信息方法一\:cmdjsp方法二\:jmc.exe方法三&#xff1a;jvisualcm.exe1.2.3 线程随机性的展现1.2.4 执行start()的顺序不代表执行run()的顺序1…

hcip第五天实验

拓扑图 每台路由器都有两个环回&#xff0c;一个24的环回&#xff0c;一个32的环回&#xff1b;32的环回用于建邻&#xff0c;24的环回用于用户网段&#xff0c;最终所有24的环回可以ping通。 实验步骤 1.配置ip 2.让2,3,4号设备的IGP协议可以通信 3.两两之间建立BGP邻居关…

DR_CAN基尔霍夫电路题解法【自留用】

无目录如图所示电路&#xff0c;输入端电压eie_iei​&#xff0c;输出端电压eoe_oeo​&#xff0c;求二者之间关系。 对其中元件进行标号&#xff0c;并将电流环路标号&#xff0c;指出各元件的压降方向&#xff1a; v值得注意的是&#xff1a; 1&#xff09;电阻R2R_2R2​同时…