redis命令超详细

news2024/9/21 11:15:20

redis数据结构介绍

redis是一个key-value的数据库,key一般是String类型,但是value的类型有很多:

基本类型:String,Hash,List,Set,SortedSet(可排序的不能重复的集合)

特殊类型:GEO,BitMap,HyperLog等

文档官网:Commands | Docs

redis通用命令

对任何数据都适用的

通过命令行或者官网的keys类进行查找

1、KEYS

查看符合模板的所有key,通配符,类似模糊查询

例:keys name keys *

但是,如果数据量过大时,keys由于是模糊查询,所有查询效率慢,redis又是单线程的,就会导致阻塞。

如果是集群开发,可以在副线程用keys查询。

2、del

删除,可以删除一组数据

下面是添加了k1,k2,k3三组数据,然后进行删除,其中age,k1,k2都有,k4没有,所以结果显示删除了3个

3、exists

判断是否存在,同样可以判断多个,同上

4、expire

给key设置一个有效期,有效期到了key会自动被删除,单位是秒

比如短信验证码等数据,一直存在会占用内存

5、ttl

查看一个key的剩余有效期

设置有效期30秒

name没了就会显示-2

-1则说明是永久存在的

String

String的value是字符串,根据字符串的格式不同可以分为3类

string:普通字符串

int:整数类型,可以做自增自减操作

float:浮点类型,可以做自增自减操作

操作:

String的常见命令有:

SET:添加或者修改已经存在的一个String类型的键值对

GET:根据key获取String类型的value

MSET:批量添加多个String类型的键值对

MGET:根据多个key获取多个String类型的value

INCR:让一个整型的key自增1

INCRBY:让一个整型的key自增并指定步长,例如: incrby num 2 让num值自增2

INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

SETEX:添加一个String类型的键值对,并且指定有效期

例:

set/get

mset/mget

返回一个数组,redis中的数组就是按这种样式存储的

incr/incrby/incrbyfloat

自增

setnx

有name所以不让存,不存在时才让存

setnx

key的层级格式

由于redis中键不允许重复,所以key的结构需要注意,不能说这里用1,下一个用2,而且redis的表是有限的,所以我们给key的命名提出一定的约束:

例如,可以像: 项目名:业务名:类型:id

这样的模式来分类id xianyang:xianyangshifan:jisuanjiyuan:jike:2101:15

如果value是java对象的话,可以将对象的内容序列化为json字符串后存储

插入几个参数后,在命令行看不太明显

在图形化工具上是这样

很清楚的对wan:user进行了分类

Hash类型

Hash类型,也叫散列,它的value是一个无序的字典,类似于HashMap

String的value是将对象进行序列化为JSON字符串,修改的话基本就是重新覆盖,不容易搞。

但是Hash结构可以将对象中的字段独立存储,可以针对单个字段做CRUD;

常见命令

Hash的常见命令有:(String的前面多加个H)

HSET key field value:添加或者修改hash类型key的field的值

HGET key field:获取一个hash类型key的field的值

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

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

HGETALL:获取一个hash类型的key中的所有的field和value

HKEYS:获取一个hash类型的key中的所有的field

HVALS:获取一个hash类型的key中的所有的value

HINCRBY:让一个hash类型key的字段值自增并指定步长

HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

例子:

hset

结构:

修改:直接重新输入数据

List类型:

主要用来保存对顺序有一定需要的数据:朋友圈的点赞,朋友圈的评论谁先谁后...

redis中的List类型与java中的LinkedList类似,可以看做双向链表,支持正向和反向检索。

特征:

有序

元素可重复

插入和删除快

查询速度一般

List常见命令:

对首:

LPUSH key element ...:向列表左侧插入一个或多个元素

LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

对尾:

RPUSH key element ...︰向列表右侧插入一个或多个元素

RPOP key:移除并返回列表右侧的第一个元素

LRANGE key star end:返回一段角标范围内的所有元素 LRANGE key 1 2

BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

例子:

lpush

这里是因为,他从左边开始放,先放1,然后2,然后3,3在2的左边,2在1的左边,同理,所以第一个插的在最右边。

lpop

这就把第一个5取走了

lrange

这里的值不变

思考:

如何利用List结构模拟一个栈?

·入口和出口在同一边

如何利用List结构模拟一个队列?

入口和出口在不同边

如何利用List结构模拟一个阻塞队列?

入口和出口在不同边

出队时采用BLPOP或BRPOP,即会等待

Set类型

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

无序(数据的顺序和我们插入的顺序无关,是有hash算法算出来的)

元素不可重复(相同元素会覆盖)

查找快

支持交集、并集、差集等功能(用于社交,好友列表等功能)

常见命令

对单个集合的增删查

SADD key member ...:向set中添加一个或多个元素

SREM key member ...:移除set中的指定元素

SCARD key:返回set中元素的个数(计数)

sismember key member:判断一个元素是否存在于set中

SMEMBERS :获取set中的所有元素

多个集合之间操作(交集,差集,并集)

SINTER key1 key2 ...︰求key1与key2的交集

SDIFF key1 key2 ...:求key1与key2的差集(这里指key1中有的key2中没有的)

SUNION key1 key2 ..:求key1和key2的并集

SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表,跳表是用来排序的,hash是存储数据的。SortedSet具备下列特性:

`可排序

`元素不重复查询

`速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

常用命令

ZADD key score member:添加一个或多个元素到sorted set,如果已经存在则更新其score值

ZREM key member:删除sorted set中的一个指定元素

ZSCORE key member:获取sorted set中的指定元素的score值

ZRANK key member:获取sorted set中的指定元素的排名,从0开始的

ZCARD key:获取sorted set中的元素个数

ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

ZINCRBY key increment member: 让sorted set中的指定元素自增,步长为指定的increment值

ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:

这里的排序默认是升序,降序需要在Z后面加REV

ZRANGE,改为:ZREVRANGE。

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

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

相关文章

CSS3雷达扫描效果

CSS3雷达扫描效果https://www.bootstrapmb.com/item/14840 要创建一个CSS3的雷达扫描效果,我们可以使用CSS的动画(keyframes)和transform属性。以下是一个简单的示例,展示了如何创建一个类似雷达扫描的动画效果: HTM…

Python -numpy 基础-------1

NumPy(Numerical Python)是Python的一个开源数值计算扩展库。它支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy的数组(ndarray)对象是一个快速且灵活的多维数组对象,用于存储…

power bi-all 相关函数

power bi-all 相关函数 1. all 函数2. allselected 函数3. allexcept()函数4. allnoblankrow() 函数 1. all 函数 作用: 清除筛选返回:清除筛选后的表格或列总结 当all参数为表时,忽略所有的筛选条件,无论…

github连接不上的解决方案(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…

鸿蒙仓颉语言【模块module】

module 模块 模块配置文件,这里指项目的modules.json 文件,用于描述代码项目的基础元属性。 {"name": "file name", //当前项目的名称"description": "项目描述", //项目描述"version": "1.0…

十、Docker版Redis集群搭建

目录 一、3主3从Redis集群配置 1、新建6个docker容器实例 2、进入容器redis-node-1并为6台机器构建集群关系 3、以6381为切入点,查看集群状态 二、主从容错切换迁移案例 1、数据读写存储 2、假如6381宕机了,他的从库6386会不会切换 三、主从扩容案…

(C语言) 文件读写基础

文章目录 🗂️前言📄ref📄访问标记🗃️文件访问标记 🗂️Code📄demo📄分点讲解🗃️打开/关闭🗃️写🗃️读 🗂️END🌟关注我 &#x1f…

Linux-socket详解

前言 OSI七层模型和TCP/IP四层模型在这里就不说了。 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将IO插入到网络中,并与网络…

Nest.js 实战 (四):利用 Pipe 管道实现数据验证和转换

什么是管道(Pipe)? 在 Nest.js 中,管道(Pipelines) 是一种强大的功能,用于预处理进入控制器方法的请求数据,如请求体、查询参数、路径参数等。管道允许开发者在数据到达控制器方法之…

使用GoAccess进行Web日志可视化

运行网站的挑战之一是了解您的 Web 服务器正在做什么。虽然各种监控应用程序可以在您的服务器以高负载或页面响应缓慢运行时提醒您,但要完全了解正在发生的事情,唯一的方法是查看 Web 日志。阅读日志数据页面并了解正在发生的事情可能需要花费大量时间。…

慎用 readFileSync 读取大文件, 教你一招如何优雅处理大文件读取

我们在编写 nodejs 服务的时候,有时候需要使用 fs.readFileSync api 去读取文件,但是使用 fs.readFileSync 会将文件读取在内存中,如果遇到了文件很大时,fs.readFileSync 会占据服务器大量的内存,即使读取的文件比较小…

代发考试战报:7月16号武汉参加HCIP-Transmission传输 H31-341考试通过

代发考试战报:7月16号武汉参加HCIP-Transmission传输 H31-341考试通过,,有2个题好像没见到过,其他都是题库里的原题,题库很准,这个题库也不是一直不变的,也没规律可循什么时候变题,哪…

【TAROT学习日记】韦特体系塔罗牌学习(6)——教皇 THE HIEROPHANT

韦特体系塔罗牌学习(6)——教皇 THE HIEROPHANT 目录 韦特体系塔罗牌学习(6)——教皇 THE HIEROPHANT牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位牌意1. 关键词/句2…

PostgreSQL 中如何实现数据的批量插入和更新?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何实现数据的批量插入和更新?一、批量插入数据1. 使用 INSERT INTO 语句结…

PSINS工具箱函数介绍——r2d

介绍工具箱里面r2d这个小函数的作用。 程序源码 function deg r2d(rad) % Convert angle unit from radian to degree % % Prototype: deg r2d(rad) % Input: rad - angle in radian(s) % Output: deg - angle in degree(s) % % See also r2dm, r2dms, d2r, dm2r, dms2r% …

运维锅总详解VLAN

本文介绍了VLAN作用、公司多个部门VLAN举例、VLAN间路由、VLAN协议控制字段解释及工作流程、VLAN历史演进等方面对VLAN技术进行详细分析。希望对您理解VLAN有所帮助! 一、VLAN作用 VLAN(Virtual Local Area Network,虚拟局域网)…

FreeSWITCH 1.10.10 简单图形化界面26-在网页上播放SIP设备视频

​ FreeSWITCH 1.10.10 简单图形化界面26-在网页上播放SIP设备视频 1、前言2、大概流程3、测试环境4、安装流媒体服务器5、设置流媒体服务器接口6、简单写个web接口7、测试一下1、web播放在线播放器1在线播放器2本地video控件 2、vlc播放vlc播放rtmpvlc播放rtsp 8、总结 1、前…

简过网:公务员公示后是不是就没有问题了?

A:请问,公务员录用考试公示期过后是不是说明就正式录用了? Q:公务员已经公示录用,就说明前期政审已经过关,档案在前期的审查工作中没有发现问题,在入职前,档案会调入组织部&#xf…

10.发布确认

解决消息不丢失的一个重要环节。 前面说过消息持久化,可能出现一种情况就是: 尽管它告诉rabbitmq将消息保存到磁盘,但是依然存在当消息刚准备存储到磁盘的时候,但是还没有存储完,消息还在缓存的一个间隔点。此时消息…

充电桩--交流充电桩硬件原理以及竞品方案

聚焦光伏领域、深耕储能市场、探究充电技术 微信公众号 小Q下午茶 聚焦光伏领域,深耕储能市场,探究充电技术 47篇原创内容 公众号 一、交流充电桩系统介绍 为了实现能源安全和“双碳”目标的达成,充电桩是需要智能电网支持,…