【Redis】Redis的类型及相关操作

一、常用的key操作命令

keys *
查看当前数据库的键值

ttl key
查看还有多少秒过期,-1表示永不过期,-2表示过期

del / unlink key
同样是删除,unlink是非阻塞删除,del则有可能导致阻塞

select dbindex
切换数据库

flushdb
清空当前库

二、字符串

keepttl
使用set key value导致键值的过期时间被刷新的问题,在这里使用keepttl即可保证键值在被重新赋值的时候不会被刷新过期时间。

mset/mget/msetnx
多值操作,mset一次性设置多个值,mget一次性获取多个值,msetnx只有在n个键都没有设置值的时候才会设置值。

mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4

getrange/setrange

set k1 abcd1234
GETRANGE k1 0 3
得到结果"abcd"SETRANGE k1 1 xxyy
get k1
得到结果"axxyy234"

数值增减

INCR key         //  val + 1
INCRBY key x     //  val + x
DECR key         //  val - 1
DECRBY key x     //  val - x

setnx key value
setex(set with expire) / setnx(set if not exists)

三、链表

redis链表底层是一个双端链表,对两端操作性能高,通过索引下表操作中间节点性能较低。

  • lpush / rpush / lrange 左端插入 \ 右端插入 \ 从左到右遍历
  • lpop / rpop 左端弹出 \ 右端弹出
  • lindex / llen 从左往右第index个元素 \ 列表中元素个数
  • lrem key n v1 删除n个值等于v1的元素
  • ltrim key sindex eindex 截取下表sindexeindex的元素赋值给key
  • rpoplpush 列表1 列表2从列表1的右端弹出的元素从左端进入列表2
  • lset key index value 已有值,设置该列表的indexvalue
  • linsert key before / after 已经存在值,插入新值

四、哈希

此时的value也是一个key-value

  • hset/hget/hmset/hmget/hgetall/hdel
  • hlen 获取某个key内的全部哈希对数量
  • hexists key在key里面的某个值的key是否存在
  • hkeys/hvalskey里面所有哈希对的键/key里面所有哈希对的值
  • hsetnx不存在赋值,存在了无效

五、集合

单值多value,并且无重复

  • sadd/srem key member添加/删除元素
  • smembers遍历集合中的所有元素
  • sismember key member判断元素是否在集合中
  • sdiff/sunion/sinter集合运算 减/并/交

六、有序集合

有序集合是在集合的基础上,每个val值前面加上了score分数
set ---> k1 v1 v2 v3
zset---> k1 score1 v1 score2 v2

  • zadd key score member 添加元素
  • zrange key start stop从start位置到stop位置遍历元素。
  • zrangebyscore key min max获取指定分数范围的元素
  • zscore key member获取元素的分数
  • zrem key value删除对应value值的score

七、位图

  • setbit key offset value设置key对应value的第offset位为valueoffset从0开始算,value是1或者0
  • gitbit key offset获取key对应valueoffset位的值
  • strlen统计字节数占多少
  • bitcount全部键里面含有1的个数

八、基数统计

HyperLogLog是用来做基数统计的算法。其优点是,在输入元素数量或者体积非常大时,计算基数所需的空间总量是固定且非常小的。基础用法主要是去重

  • pfadd key value添加指定元素到HyperLogLog中
  • pfcount key返回HyperLogLog的估算值
  • pfmerge destkey sourcekey将多个HyperLogLog合并为一个HyperLogLog

九、地理空间

  • GEOADD key longitude latitude member添加经纬度坐标
  • GEOHASH key member使用geohash保存返回坐标
  • GEODIST key member1 member2计算两个点的距离
  • GEORADIUS以给定的经纬度为中心,求半径范围内的元素
  • GEORADIUSMEMBER找出位于指定范围内的元素,中心点由给定的位置元素决定

十、流

Reids消息队列的实现方式有:

  • List实现消息队列,支持了一对一的消息传输,但是一对多的消息传输却力不从心。
  • Redis发布订阅(pub/sub)缺点在于消息无法持久化,如果没有消费者,消息就会直接被丢弃。

所以,在Redis5.0出现了Stream用来支持消息队列。Stream实现了消息队列,支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加稳定可靠。

10.1消息队列的结构

在这里插入图片描述

名词解释
Message Content消息内容
Consumer group消费组,一个消费组有多个消费者
Last_delivered_id游标,消费组中的消费者读取消息后会使游标前移
Consumer消费者
pending_ids记录被当前消费组已读但未ack的消息Id,用来确保客户端至少消费了消息一次,但不会在网络传输的中途丢失了。

10.2 队列相关命令

  • XADD添加消息到队列末尾,*表示自动生成id
  • XRANGE start end count获取消息队列,start表示开始(-表示最小值),end表示结束(+表示最大值),count表示最多获得多少个值。
  • XREVRANGE end start count反向获取消息队列
  • XDEL删除消息
  • XLEN获取消息队列的消息长度
  • XTRIM对stream长度进行截取
  • XREAD用于获取消息,返回大于指定ID的消息,可以设置是否以阻塞的方式读取

10.3 消费组相关命令

  • XGROUP CREATE用于创建消费者组,命令末尾带$表示从尾部开始消费,命令末尾带0表示从头部开始消费。
  • XREADGROUP GROUP groupA consumer1 STREAMS mystream >用于让消费者读取消息,消费组groupA内的消费者consumer1从mystream消息队列中读取所有信息。并且,同一消费组里的消费者不能读取同一条消息。
  • XPENGDING查询每个消费组内所有消费者已读取但未确认的消息,并且能查看某个消费者具体读了哪些数据
  • XACK向消息队列确认消息处理已经完成

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

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

相关文章

一文盘点Mendix在SAP之上的那些事儿

前言 近来接手了2个与SAP有关的低代码案子,客户都会问Mendix和SAP之间怎么回事。 2017年开始Mendix 成为SAP Endorsed APP级别合作伙伴,并再度升级为Solution Extension最高级别。 两家公司风雨同舟七载,服务的全球大客户不胜枚举。 商业…

【Spring】SpringBoot整合MybatisPlus的基本应用

📝个人主页:哈__ 期待您的关注 一、MybatisPlus简介 先来看一下官方的简介吧。 MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。Myb…

图解·Linux系统安装,手把手教你搞定操作系统!

这里博主使用了 VMware Workstation 16 Pro 版本(不同版本可能略有差别)从头到尾用图文搭配的模式给大家演示如何进行 Linux系统 的安装!内容十分详尽,细节基本也到位了,可以说是保姆级教学了,希望对大家有…

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日,由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧(北京)科技有限公司承办,来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite(精灵)是 2D/3D 游戏最常见的显示图像的方式,在节点上添加 Sprite 组件,就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式,包括普通(Simple)、九宫格&#x…

GPIO的基础知识

GPIO的基础知识 STM32H7 的GPIO基本配置不使用的引脚设置为模拟模式IO补偿单元关闭补偿单元开启补偿单元 注入电流大小和特性GPIO 的8种模式四种输入模式两种输出模式推挽输出开漏输出 复用推挽和开漏 GPIO拉灌电流负载能力GPIO兼容CMOS和TTL 首先对于GPIO我们需要注意以下几点…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元,具有很好的预率性能,符合AEC-0200标准,其封装尺寸仅为3.2x2.5x0.7mm,工作温度范围在-40℃~125℃之间&…

LeetCode-热题100:206. 反转链表

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入: head [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入: head [1,2] 输出: [2,1] 示例 3…

低代码革新:软件开发的未来潜力与创新路径探索

过去的一年,挑战与机遇并存。人们一边忧虑市场经济下行所带来的新的增长难题、裁员危机,一边惊叹于AIGC、量子技术等领域不断涌现新的创新成果。 时代发生了改变,传统“互联网”的模式已走入尾声,新一轮的科技革命与产业变革正在到…

9proxy—数据采集工具全面测评

9Proxy数据采集工具Unlock the web with 9Proxy, the top residential proxy provider. Get unlimited bandwidth, affordable prices, and secure HTTPS and Socks5 configurations.https://9proxy.com/?utm_sourceblog&utm_mediumcsdn&utm_campaignyan 前言 在当今数…

线性数据结构

1.数组 数组使用一块连续的内存来存储元素,并且元素的类型都是相同的。可以通过索引来访问。 2.链表 链表由一系列节点组成,每个节点包含两部分:数据部分和指针部分。数据部分用于存储元素的值,指针部分则指向下一个节点。没有使…

面向C++程序员的Rust教程(二)

先序文章请看: 面向C程序员的Rust教程(一) 所有权与移动语义 要说Rust语言跟其他语言最大的区别,那笔者觉得非数这个所有权和移动语义莫属。 深浅复制 对于绝大多数语言来说,变量/对象之间的赋值通常都是复制语义。…