【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.mzph.cn/news/788106.shtml

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

相关文章

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和(或)呼吸道症状,病原学组成复杂,标本类型选择多样,如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中,工具--获取工具与功能。 2. 安装图中工具,原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示: 4 在unity中运行游戏,vs这边确实成功断住了!

第四百三十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…

简易线程池实现

简易线程池实现 ThreadPool.hpp&#xff08;线程池&#xff09; #ifndef THREADPOOL_HPP #define THREADPOOL_HPP#include <iostream> #include <cstdlib> #include <unistd.h> #include <vector> #include <queue> #include "sem.hpp&qu…

【已解决】java: 无效的目标发行版: 19

问题描述 现在从Spring Boot官网下载的Spring boot文件的诸多配置的版本&#xff0c;无法直接选择和电脑已有配置相匹配的。所以直接下载安装包&#xff0c;并用IDEA打开后无法直接运行。 我在网站上下载的配置如下图&#xff1a; 我遇到的问题是运行时报错java: 无效的目标发…

Flink Checkpoint 状态后端详解:类型、特性对比及场景化选型指南

Apache Flink 提供了多种状态后端以支持 Checkpoint 机制下的状态持久化&#xff0c;确保在故障发生时能够快速恢复状态并实现 Exactly-Once 处理语义。以下是几种常见状态后端的详细介绍及其对比情况&#xff0c;以及不同场景下的选型建议&#xff1a; 1. MemoryStateBackend…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…

【QT学习】4.浮动窗口

结果&#xff1a; 代码&#xff1a; //制作核心控件&#xff1a;文本编辑框QTextEdit* pTextEditnew QTextEdit;//制作浮动控件connect(pMenu1,&QMenu::triggered,[](QAction* pAction){qDebug()<<pAction->text()<<endl;if(pAction->text()"浮动…

WebGIS 之 Openlayer

1.导入第三方依赖 <link rel"stylesheet" href"https://lib.baomitu.com/ol3/4.6.5/ol.css"> <script src"https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>2.初始化地图 初始化地图new ol.Map({}) 参数target:制定初始化…

国资委确定首批起航企业,重点布局人工智能、量子信息等新兴领域

国务院国资委近日按照“四新”&#xff08;新赛道、新技术、新平台、新机制&#xff09;标准&#xff0c;遴选确定了首批启航企业&#xff0c;加快新领域新赛道布局、培育发展新质生产力。 据了解&#xff0c;去年以来&#xff0c;国务院国资委围绕加快培育创新型国有企业&…

【华为OD机试C++】求int型正整数在内存中存储时1的个数

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例1示例2代码描述 输入一个 int 型的正整数,计算出该 int 型数据在内…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…

【LeetCode热题100】【链表】K 个一组翻转链表

题目链接&#xff1a;25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 递归迭代&#xff0c;迭代翻转每组的链表节点&#xff0c;递归翻转下一组的链表节点 class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode*nextHeadhead; …

事件队列事件循环(EventLoop) 宏任务 微任务详解 面试题

事件队列 事件循环 EventLoop 宏任务 微任务详解 一、概念二、宏任务&#xff08;多个&#xff09;、微任务&#xff08;1个&#xff09;三、Promise 的构造函数四、process.nextTick在事件循环中的处理五、vue nextTick原理 一、概念 event: 事件 loop: 循环&#xff0c;循环…

突破编程_C++_C++14新特性(C++14新特性概览)

1 C14 的发展背景 C14 是 C 编程语言的一个重要版本&#xff0c;它的发展背景紧密关联于C语言的发展历程以及计算机科学领域的整体进步。 首先&#xff0c;C 语言起源于 20 世纪 80 年代早期&#xff0c;它的设计初衷是为了提供一种功能强大、高效且可移植的编程语言&#xf…

系统学习Docker:1_Docker简介以及2_安装Docker

01-Docker简介 什么是Docker 在不同的机器和操作系统中安装运行环境和依赖库是一件很烦人的事情&#xff0c;容器就是为了解决这一问题而出现的技术。 容器是一种虚拟化技术&#xff0c;将应用程序及其依赖项&#xff08;环境、系统工具等&#xff09;打包到一个独立的可移植…

数据结构:链表的双指针技巧

文章目录 一、链表相交问题二、单链表判环问题三、回文链表四、重排链表结点 初学双指针的同学&#xff0c;请先弄懂删除链表的倒数第 N 个结点。 并且在学习这一节时&#xff0c;不要将思维固化&#xff0c;认为只能这样做&#xff0c;这里的做法只是技巧。 一、链表相交问题 …

[Linux]基础IO(中)---理解重定向与系统调用dup2的使用、缓冲区的意义

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…

图神经网络GNN

图神经网络GNN B、C、D的特征在某种程度上可以代表A的特征 上面就是一次GCN的操作