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和位置的映射

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

完全卸载IDEA(2024最新)

彻底卸载IntelliJ IDEA 打开控制面板  直接在电脑中搜索控制面板打开。&#xff08;我的电脑是windows11&#xff09; 点击卸载程序 右键卸载 勾选插件和缓存 删除InterIIiJIdea文件夹 文件位置&#xff1a;C:\Users\61916\AppData\Local\JetBrains 其中61916是我电脑…

LoRa终端的主要作用

在当今数字化快速发展的时代&#xff0c;物联网技术正逐渐渗透到我们生活的方方面面。而作为物联网的关键技术之一&#xff0c;Lora终端在其中扮演着至关重要的角色。主要介绍Lora终端的主要作用&#xff0c;揭示其在物联网时代的重要性和应用范围。 一、 LoRa终端的定义&…

CentOS删除除了最近5个JAR程序外的所有指定Java程序

帮我写一个shell脚本&#xff0c;ps -eo pid,lstart,cmd --sort-start_time | grep "pgz-admin"查到的结果&#xff0c;返回的所有进程PID&#xff0c;第六个之上的&#xff0c;全部kill 当然&#xff0c;你可以创建一个简单的Shell脚本来完成这个任务。以下是一个例…

《TCP/IP详解 卷一》第7章 防火墙和NAT

7.1 引言 NAT通常改变源IP和源端口&#xff0c;不改变目的IP和目的端口。 7.2 防火墙 常用防火墙&#xff1a; 包过滤防火墙&#xff08;packet-filter firewall&#xff09; 代理防火墙&#xff08;proxy firewall&#xff09; 代理防火墙作用&#xff1a; 1. 通过代理服务…

R语言空间分析、模拟预测与可视化

随着地理信息系统&#xff08;GIS&#xff09;和大尺度研究的发展&#xff0c;空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用&#xff0c;其中在空间分析方面扮演着重要角色&#xff0c;与空间相关的包的数量也达到130多个。在本…

Spring Boo项目中方法参数对象中字段上存在的自定义注解如何进行拦截解析

一、前言 在Spring Boot项目开发过程中&#xff0c;我们经常会使用到自定义注解的方式进行业务逻辑开发&#xff0c;此时注解我们一般是放在方法或者类上面&#xff0c;通过AOP切面拦截的方式进行自定义业务逻辑填充。但是如果自定义注解放在类的字段上&#xff0c;此时应该如…

C语言中strstr函数的使用!

strstr函数的作用是什么&#xff1f; 查找子字符串 具体直接看下面的这段代码我相信你必明白 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { char *p1 "abcdefghijklmnopqrstuvwxyz"; char* p2 "abc"; char* r…

SocketWeb实现小小聊天室

SocketWeb实现小小聊天室 消息推送的常见方式轮询长轮询SSE&#xff08;server-sent event&#xff09;&#xff1a;服务器发送事件WebSocketWebSocket简介WebSocket API 实现小小聊天室实现流程消息格式客户端-->服务端服务端-->客户端 消息推送的常见方式 轮询 浏览器…

c语言经典测试题4

1.题1 #include <stdio.h>//没有break的话&#xff0c;输入什么都会往下一直执行下去&#xff0c;而且default在最后就会全都执行 int main() {char c;int v0 0, v1 0, v2 0;do{switch (c getchar())// 输入ADescriptor{casea:caseA:casee:caseE:casei:caseI:caseo:…

sklearn.preprocessing.RobustScaler(解释和原理,分位数,四分位差)

提示&#xff1a;sklearn.preprocessing.RobustScaler&#xff08;解释和原理&#xff0c;分位数&#xff0c;四分位差&#xff09; 文章目录 [TOC](文章目录) 一、RobustScaler 是什么&#xff1f;二、代码1.代码2.输出结果 总结 提示&#xff1a;以下是本篇文章正文内容&…

数据结构2月21日

双向链表: func函数&#xff1a; #include <stdio.h> #include <stdlib.h> …

人事|人事管理系统|基于Springboot的人事管理系统设计与实现(源码+数据库+文档)

人事管理系统目录 目录 基于Springboot的人事管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、员工管理 3、公告信息管理 4、公告类型管理 5、培训管理 6、培训类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…

AI一键生成3D模型!

一、Genie Genie 是 Luma AI 推出的一个文本到 3D 的生成模型&#xff0c;可以在 10 秒生成 4 款 3D 模型&#xff0c;自动精修后质感非常逼真&#xff0c;目前支持免费使用。 此次的 1.0 版本更新后将生成功能由 Discord 转到了单独的网页&#xff0c;使用起来更方便&#x…

C# 学习第三弹——表达式

表达式操作数运算符 &#xff08;一&#xff09;算数运算符 错误例子&#xff1a;这不是python&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 正确结果&a…

安全防御综合实验

需求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网&#xff08;多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换&#xff09; 2、分公司设备可以通过总公司的移动链路和电信链路访问DMZ区的http服务器 3、分公司内部的客户端可以通过公网地址访问到…

《数据安全销毁实践指南》:企业文件数据保密销毁之人员能力流程技术等干货

数据销毁处理 为了满足合规要求及组织机构本身的业务发展需求&#xff0c;组织机构需要对数据进行销毁处理。因为数据销毁处理要求针对数据的内容进行清除和净化&#xff0c;以确保攻击者无法通过存储介质中的数据内容进行恶意恢复&#xff0c;从而造成严重的敏感信息泄露问题。…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

小技巧:Nuxt处理全局组件的显示与隐藏

在Nuxt开发过程中&#xff0c;大家会遇到需要控制全局组件的显示与隐藏。比如说移动端的路由导航栏、头部的返回操作。。。 为了使切换页面的同时&#xff0c;确定是否展示全局组件&#xff0c;保证页面展示的平稳过渡。 下面是我在项目中用到一个办法&#xff0c;已实现。 …

STL常用容器(vector容器)---C++

STL常用容器目录 2.vector容器2.1 vector基本概念2.2 vector构造函数2.3 vector赋值操作2.4 vector容量和大小2.5 vector插入和删除2.6 vector数据存取2.7 vector互换容器2.7.1 vector互换容器收缩内存空间 2.8 vector预留空间 2.vector容器 2.1 vector基本概念 功能&#xf…

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition&#xff0c;特别是其【中文进阶版 Win/Mac】&#xff0c;是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化&#xff0c;并兼容W…