Redis7

 摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/

官网地址:

英文:Redis

中文:CRUG网站 redis中文文档

安装包:https://redis.io/download/,选择redis7.0版本即可

Redis在线测试地址(不用下载也能玩):Try Redis

Redis命令参考:Redis 命令参考 — Redis 命令参考

Redis的安装

window版安装:

下载地址:GitHub - zkteco-home/redis-windows: Native port of Redis for Windows,it can be installed as service.

linux版安装:

Linux环境安装Redis必须先具备gcc编译环境

​ 1.1什么是gcc?

gcc是linux下的一个编译程序,是C程序的编译工具。 GCC(GNU Compiler Collection)是 GNU(GNU's Not Unix) 计划提供的编译器家族,它能够支持 C,C++, Objective-C, Fortran, Java 和Ada 等等程序设计语言前端,同时能路运在 X86,X86-64,IA-64,PowerPC,SPARC和Alpha 等等几乎目前所有的硬件平台上。鉴于这些特征,以及 GCC 编译代码的高效性,使得 GCC 成为绝大多数自由软件开发编译的首选工具。虽然对于程序员们来说,编译器只是一个工具,除了开发和维护人员,很少有人关注编译器的发展,但是 GCC 的影响力是如此之大,它的性能提升甚至有望改善所有的自由软件的运行效率,同时它的内部结构的变化也体现出现代编译器发展的新特征。

​ 1.2查看gcc版本

gcc -v

​ 1.3安装

·安装redis之前需要具备c++库环境

·yum -y install gcc-c++

 10大数据类型

提前声明

这里说的数据类型是value的数据类型,key的类型都是字符串

1.redis字符串(String)

String是redis最基本的数据类型,一个key对应一个value。

string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。

string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

2.redis列表(List)

Redis列表是最简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的$\textcolor{blue}{头部(左边)或者尾部(右边)}$,它的底层实际是个$\textcolor{red}{双端链表}$,最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)

3.redis哈希表(Hash)

Redis Hash是一个string类型的field(字段)和value(值)的映射表,Hash特别适合用户存储对象。

Redis中每个Hash可以存储2^32-1个键值对(40多亿)

4.redis集合(Set)

Redis的Set是string类型的$\textcolor{red}{无序集合}$。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者Hashtable。

Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员)

5.redis有序集合(ZSet)

zset(sorted set:有序集合)

Redis zset和Set一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个类型的分数不同的是每个元素都会关联一个������类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

的成员是唯一的,但是分数()却可以重复。����的成员是唯一的,但是分数(�����)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是。集合中最大的成员数是����集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是�(1)。集合中最大的成员数是2.32−1

6.redis地理空间(GEO)

Redis GEO主要用于存储地理位置信息,并对存储的信息进行操作,包括:

添加地理位置的坐标。

获取地理位置的坐标。

计算两个位置之间的距离。

根据用户给定的经纬度坐标来获取指定范围内的地址位置集合。

7.redis基数统计(HyperLogLog)

HyperLogLog是用来做$\textcolor{red}{基数统计}$的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需要的空间总是固定且是很小的。

在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

 8.redis位图(bitmap)

 

由0和1状态表现的二进制位的bit数组

9.redis位域(bitfield)

通过bitfield命令可以一次性操作多个$\textcolor{red}{比特位域(指的是连续的多个比特位)}$,它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应的执行结果。

说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。

10.redis流(Stream)

Redis Stream是Redis5.0版本新增加的数据结构。

Redis Stream主要用于消息队列(MQ,Message Queue),Redis本身就是一个Redis发布订阅(pub/sub)来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。

简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息。

而Redis Stream提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

常见数据类型操作命令

Redis键(key)

案例

1.keys  *

###查看当前库所有的key

2.exists key

判断某个key是否存在

3.type key

查看你的key是什么类型

4.del key

删除指定的key数据

5.unlink key

非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。

del key 是原子的删除,只有删除成功了才会返回删除结果,如果是删除大key用del会将后面的操作都阻塞,而unlink key 不会阻塞,它会在后台异步删除数据。

6.ttl key

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

7.expire key 秒钟

为给定的key设置过期时间

8.move key dbindex[0-15]

将当前数据库的key移动到给定的数据库DB当中

9.select dbindex

切换数据库【0-15】,默认为0

10.dbsize

查看当前数据库key的数量

11.flushdb

清空当前库

12.flushall

通杀全部库

 Redis字符串(String)

单值单value

案例:

返回值:

设置成功则返回OK,返回nil为未执行Set命令,如不满足NX,XX条件等。

若使用GET参数,则返回该键原来的值,或在键不存在时nil。

如何获得设置指定的key过期的Unix时间,单位为秒

System.out.println(Long.toString(System.currentTimeMillis()/1000L));

 

2.同时设置/获取多个键值

MSET key value [key value...]

MGET key [key ...]

mset/mget/msetnx

 

3.获取指定区间范围内的值

getrange/setrange

 

数值增减

一定要是数据才能进行加减一定要是数据才能进行加减

递增数字:INCR key

增加指定的整数:INCRBY key increment

递减数值:DECR key

减少指定的整数:DECRBY key decrement

 

获取字符串长度和内容追加

获取字符串长度:strlen key

字符串内容追加:append key value

 

分布式锁

setnx key value

setex(set with expire)键秒值/setnx(set if not exist)

 

getset(先get再set)

getset:将给定key的值设为value,并返回key的旧值(old value)。

简单一句话:先get然后立即set

 

 Redis列表(List)

单key多value

简单说明:$\textcolor{red}{一个双端链表的结构}$,容量是2的32次方减1个元素大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加;

如果键不存在,创建新的链表;

如果键已存在,新增内容;

如果值全移除,对应的键也就消失了

 他的底层实际上就是个双向链表,对两端的操作性能很高,通过索引下操作中间的节点性能会差

 

案例:

1.lpush/rpush/lrange 注:没有rrange

 2.lpop/rpop

 lindex,按照索引下标获得元素(从上到下)

 llen,获取List列表中元素的个数

 

lrem key 数字N 给定值v1

解释:删除N个值等于v1的元素

从left往right删除2个值等于v1的元素,返回的值为实际删除的数量

LREM list3 0 值,表示删除全部给定的值,$\textcolor{red}{零个就是全部值}$

 

 ltrim key 开始index 结束index

 截取指定范围的值后在赋值给key

 

 

rpoplpush 源列表 目的列表

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

 

lset key index value

让指定数组集合的小标位置值替换成新值

 

 linsert key before/after 已有值 插入的新值

 

 Redis哈希(Hash)

KV模式不变,但V是一个键值对 Map<String, Map<Object, Object>>

案例:

1.hset/hget/hmset/hmget/hgetall/hdel

hlen

获取某个key内的全部数量

 

 hexists key 在key里面的某个值的key

用于检查哈希表(Hash)中是否存在给定的字段(field)。语法格式如下:

 

  • key: 要检查的哈希表的名称。
  • field: 在哈希表中要检查的字段名。

 此命令返回一个布尔值,如果哈希表key中存在给定的field,则返回1(真),否则返回0(假)。例如:

HSET myhash field1 value1

HSET myhash field2 value2

HEXISTS myhash field1 # 返回 1,因为 field1 存在于哈希表 myhash 中

HEXISTS myhash field3 # 返回 0,因为 field3 不存在于哈希表 myhash 中

 

 hkeys/hvals

hkeys key 查询出所有key对应的子key值

hvals key 查询出所有key对应的子key的value值

 

 hincrby/hincrbyfloat

 

hsetnx

不存在赋值,存在了无效

Redis集合(Set)

单值多value,且无重复

 

1.SADD key member [member ...]

添加元素,可以多次向同一个key中设置不同值,不会覆盖之前的值

2.SMEMBERS key

遍历集合中的所有元素

3.SISMEMBER key member

 判断元素是否在集合中

 

 

SREM key member [member ...]

删除元素

 

 

scard

获取集合里面的元素个数

 

 

SRANDMEMBER key [数字]

从集合中随机展现设置的数字个数元素,元素不删除

 

SPOP key [数字]

从集合中随机弹出一个元素,出一个删除一个

 

 

smove key1 key2

将key1里已存在的某个值赋给key2

 

集合运算-集合的差集运算A-B

属于A但是不属于B的元素构成的集合

SDIFF key [key ...],可以计算多个元素的差集

 

 

集合运算-集合的并集运算A∪B

属于A或者属于B的元素构成的集合

SUNION key [key ...]

 集合运算-集合运算-集合的交集运算A∩B

属于A同时也属于B的共同拥有的元素构成的集合

SINTER key [key ...]

 

SINTERCARD numkeys key 【key ...】【LIMIT limit】

numkeys 的具体值由输入的key个数决定

SINTERCARD 为redis7新命令,它不返回结果集,而是返回结果的基数。返回由所有给定集合的交集产生的集合的基数

基数的词语解释: 用于表示事物个数的数

 Redis有序集合Zset(sorted set)

在set基础上,每个val值前加一个score分数值。之前set是k1 v1 v2 v3,现在zset是 k1 score1 v1 score2 v2

案例:

向有序集合中加入一个元素和该元素的分数

1.ZADD key score member [score member ...]

添加元素

2.ZRANGE key start stop [WITHSCORES]

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素

3.zrevrange key start stop [WITHSCORES]

反转集合,按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素

 

4.ZRANGEBYSCORE key min max 【WITHSCORES】【LIMIT offset count】

获取指定分数范围的元素,可以在min和max前面加个(,表示不包含

limit作用是返回限制,limit开始下标步,一共多少步

 

5.ZSCORE key member

获取元素的分数

6.ZCARD key

获取集合中元素的数量

7. zrem key member [member ...]

某个score对应的value值,作用是删除元素

 

8.ZINCRBY key increment member

增加某个元素的分数

 

9.ZCOUNT key min max

获得指定分数内的元素个数

 

10.ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]

从键名列表中的第一个非空排序集中弹出一个或多个元素,他们是成员分数对

 

11.zrank key member [withscore]

作用是通过子value获得下标值

12.zrevrank key member [withscore]

作用是通过子value逆序获得下标值

 

 Redis位图(bitmap)

一句话:由0和1状态表现的二进制位的bit数组

看需求:

  1. 用户是否登陆过Y、N,比如软件的每日签到功能
  2. 电影、广告是否被点击播放过
  3. 钉钉打卡上下班,签到统计

 是什么?

 

说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型

位图本质是数组位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。

Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32=4294967296)

能干嘛?

用于状态统计,Y、N类似AtomicBoolean

基本命令

 

1.setbit key offset value

setbit 键偏移位 只能零或者1

Bitmap的偏移量从零开始计算的

 

getbit key offset

获取键偏移位的值

 

 

strlen key

统计字节数占用多少

 不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容

 

bitcount key [start end [byte|bit]]

全部键里面包含有1的有多少个

 

 

bitop operation(AND|OR|XOR|NOT) destkey key [key ...]

案例:连续2天都签到的用户数量

假如某个网站或者系统,它的用户有1000W,我们可以使用redis的HASH结构和bitmap结构做个用户id和位置的映射

 

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

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

相关文章

(全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF

研究生英语读写教程基础级教师用书PDF 研究生英语读写教程提高级教师用书PDF pdf下载&#xff08;完整版下载&#xff09; &#xff08;1&#xff09;研究生英语读写教程基础级教师用书PDF &#xff08;2&#xff09;研究生英语读写教程基提高级教师用书PDF

WPF的DataGrid自动生成中文列头

直接将一个对象集合绑定到DataGrid上面&#xff0c;设置自动生成列AutoGenerateColumns"True"&#xff0c;DataGrid会自动根据对象类的属性生成对应的列 示例类对象&#xff1a; public class DataModel{public int Id { get; set; }public string Name { get; set;…

vue -- watermark水印添加方法

前言 项目生成公司水印是很普遍的需求&#xff0c;下面是vue项目生产水印的方法。话不多说&#xff0c;复制粘贴就可以马上解决你的需求。 步骤1 创建watermark.js文件。目录结构 /** 水印添加方法 */let setWatermark (str1, str2) > {let id 1.23452384164.1234124…

FL Studio 21 Mac汉化免费版 附安装教程

FL Studio 21 Mac是Mac系统中的一款水果音乐编辑软件&#xff0c;提供多种插件&#xff0c;包括采样器、合成器和效果器&#xff0c;可编辑不同风格的音乐作品&#xff0c;Pattern/Song双模式&#xff0c;可兼容第三方插件和音效包&#xff0c;为您的创意插上翅膀。FL Studio 2…

AI-数学-高中-27-复数相关定义及运算

原作者视频&#xff1a;【复数】【一数辞典】2复数的四则运算_哔哩哔哩_bilibili 复数的标准形式&#xff1a; 注意&#xff1a;把i当成x看&#xff0c;其他完全平方公式一样。 混合运算规则&#xff1a;实部跟实部运算&#xff0c;虚部跟虚部运算&#xff0c;i^2-1; 注意&…

Java最新面试宝典 SpringMVC面试题)

Java最新面试宝典 SpringMVC面试题 前言1、什么是SpringMVC&#xff1f;2、SpringMVC 的优点&#xff1f;3、Spring MVC配置步骤&#xff1f;4、SpringMVC工作原理了解吗&#xff1f;5、Spring MVC 核心组件的功能&#xff1f;6、B/S 系统标准的三层架构是什么&#xff1f;7、C…

DETR(1):论文详解

文章目录 1. DETR 模型结构2.损失函数2.1 预测结果和GT 的匹配2.2 训练的loss计算3.实验3.1 大物体表现效果好3.2 Transformer Encoder 和Decoder的作用3.3 object query4. 伪代码5. 结论

Jetpack Compose 1.7中的新修饰符receiveContent

在 Jetpack Compose 1.7.0 中提供了一个新的修饰符&#xff0c;Modifier.receiveContent&#xff0c;通过该修饰符可以支持在输入框中输入输入法软键盘中自带的图片表情等&#xff0c;非常方便。 示例代码如下&#xff1a; class MyActivity: ComponentActivity() { overrid…

[源码分析]webrtc音频流从接收到播放的关键流程

如图所示&#xff0c;音频流从接收到播放的核心关键流程和执行线程。 neteq中对音频流的RTP数据包进行了处理和解码操作。同时数据出现了跨线程的投递。 后面有空补上核心对象之间的关系图。 后面将添加对neteq模块的细节分析。

影像仪激光扫描功能,无缝连接2D/3D混合测量

在现代工业生产领域&#xff0c;影像仪用于质量控制和产品检测&#xff0c;是一个不可或缺的工具。它通过高精度的成像和图像处理技术&#xff0c;可以及时发现产品的缺陷和异常&#xff0c;以保证产品质量的稳定性和一致性。 影像仪的重要性及其面临的挑战 在工业生产方面&a…

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

mac打不开xxx软件, 因为apple 无法检查其是否包含恶意

1. 安全性与隐私下面的允许来源列表&#xff0c;有些版本中的‘任何来源’选项被隐藏了&#xff0c;有些从浏览器下载的软件需要勾选这个选项才能安装 打开‘任何来源’选项 sudo spctl --master-disable 关闭‘任何来源’选项 sudo spctl --master-enable

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

MS90C031LVDS 四通道总线驱动器,可兼容替代DS90C031

产品简述 MS90C031 是一款低功耗、高数据传输率的四通道 CMOS 差分 LVDS 信号总线驱动芯片&#xff0c;其支持的数据接收率超过 155.5Mbps (77.7MHz) 。 MS90C031 将 TTL/CMOS 输入信号&#xff0c;转换成低压 (350mV) 的差分输出信 号。芯片驱动器还支持三态输出功…

【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范

【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范 大家好 我是寸铁&#x1f44a; 总结了一篇测试API查询信息无法返回数据库信息与api、rpc文件编写规范的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 大家好&#xff0c;我是寸铁&#xff01…

【王道数据结构】【chapter7查找】【P285t5】

线性表中各节点的检索概率不等时&#xff0c;可用如下策略提高顺序检索的效率&#xff1b;若找到指定的结点&#xff0c;则将该结点和其前驱结点&#xff08;若存在&#xff09;交换&#xff0c;使得经常被访问的结点尽量位于表的前端。试设计在顺序结构和链式结构的线性表盘上…

麒麟银河操作系统V10部署ffmpeg

麒麟银河操作系统V10部署ffmpeg 部署ffmpeg用来处理视频的各种操作 想使用ffmpeg&#xff0c;要先安装nasm&#xff0c;yasm&#xff0c;x264之后&#xff0c;否则会报错 nkvers 查看麒麟操作系统版本 cat /proc/version #查看linux版本信息 uname -a #查看linux版本和内核…

vue3的echarts从后端获取数据,用于绘制图表

场景需求&#xff1a;后端采用flask通过pymysql从数据库获取数据&#xff0c;并返回给前端。前端vue3利用axios获取数据并运用到echarts绘制图表。 第一步&#xff0c;vue中引入echarts 首先vue下载echarts npm install echarts 然后在main.js文件写如下代码 import {create…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间&#xff1a;2024-02-23 最后编辑时间&#xff1a;2024-02-24 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名初三学生&#xff0c;热爱计算机和数学&#xff0c;我们一起加…

Spring 事务传播机制

事务传播机制&#xff1a;多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的。 ⽐如&#xff1a;有两个⽅法A&#xff0c;B都被 Transactional 修饰,&#xff0c;A⽅法调⽤B⽅法 A⽅法运⾏时, 会开启⼀个事务。当A调⽤B时&#xff0c; B⽅法本⾝也有事务&#xf…