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://www.mzph.cn/news/706205.shtml

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

相关文章

等保测评与商用密码共铸工控安全“双评合规”新篇章

最近听说了一个段子&#xff1a;“网络安全就像美女的内衣&#xff0c;等保和密评就是最贴身的内衣两件套&#xff0c;上下身一件都不能少。否则你的魔鬼身材&#xff08;核心数据&#xff09;就有可能被色狼&#xff08;黑客&#xff09;一览无余&#xff08;数据泄漏&#xf…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装&#xff08;可选&#xff09;安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量&#xff1a; Mean: 高斯分布中的μ值&#xff08;平均值&#xff09; Sensit: sensitivity&#xff0c;也就是1个Sigma的值&#xff1b; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

力扣 300. 最长递增子序列

题目来源&#xff1a;https://leetcode.cn/problems/longest-increasing-subsequence/description/ C题解1&#xff1a;动态规划 用两个循环&#xff0c;每到一个元素&#xff0c;就找它之前的最长递增子序列。 dp[i]表示第i个元素的最长递增子序列&#xff0c;里层遍历寻找之…

RubyMine 2023:让Ruby编程变得更简单 mac/win版

JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境&#xff08;IDE&#xff09;。这款工具集成了许多先进的功能&#xff0c;旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…

使用vuetify实现全局v-alert消息通知

前排提示&#xff0c;本文为引流文&#xff0c;文章内容不全&#xff0c;更多信息前往&#xff1a;oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面&#xff0c;结果发现官方没有提供简便的全局消息通知组件&#xff08;像Element中的ElMessage那样&#xff09;&#xf…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…

[HackmyVM]靶场 Azer

kali:192.168.56.101 主机发现 arp-scan -l靶机:192.168.56.103 端口扫描 nmap -p- 192.168.56.103 开启了80 3000端口 看一下80端口 一直在那转&#xff0c;看源码也没什么有用的东西 扫一下目录 扫不到什么东西 看看另一个端口 是个登录界面 输入admin/admin测试 错误…

Kafka入门二——SpringBoot连接Kafka示例

实现 1.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

基于springboot+vue的学科平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…

Linux环境基础开发工具使用篇(三) git 与 gdb

一、版本控制器-git 1.简单理解: ①git既是服务端&#xff0c;又是客户端 ②git会记录版本的变化 ③git是一个去中心化的分布式软件 git/gitee 是基于git仓库搭建的网站&#xff0c;让版本管理可视化 2.git 三板斧提交代码 查看安装的git版本 git--version 命令行提交代…

FPGA IO命名与Bank划分

文章目录 IO的命名IO物理命名IO功能命名 Bank简介FPGA器件功能命名与Bank划分查找XILINXIntelLATTICE IO的命名 IO物理命名 FPGA的IO物理命名规则&#xff0c;也就是我们做管脚约束时候的命名。芯片通常是长方体或者正方体&#xff0c;所以命名通常采用字母数字组合的方式&am…

FMM 笔记:st-matching(colab上执行)【官方案例解读】

在colab上运行&#xff0c;所以如何在colab上安装fmm&#xff0c;可见FMM 笔记&#xff1a;在colab上执行FMM-CSDN博客 st-matching见论文笔记&#xff1a;Map-Matching for low-sampling-rate GPS trajectories&#xff08;ST-matching&#xff09;-CSDN博客 0 导入库 from…

华为畅享 60X 到底值得入手吗?这4点你必须要知道

作为一款主打千元机市场的机型&#xff0c;华为畅享 60X 到底怎么样&#xff1f;是否值得入手&#xff1f; 可以负责任的说华为畅享 60X 是一款性价比超高的手机&#xff0c;凭借其出色的硬件配置和适中的价格&#xff0c;不仅拥有华为完整的鸿蒙生态&#xff0c;同时它超大屏幕…

【DL】深度学习之语音识别

目录 1 核心概念 2 安装依赖库 3 实践 语音信号处理&#xff08;Speech Signal Processing&#xff09;简称语音处理。 语音识别&#xff08;ASR&#xff09;和自然语言处理&#xff08;NLP&#xff09;&#xff1a;语音识别就是将语音信号转化成文字文本&#xff0c;简单实…

Spring-Cloud-Gateway集成Sentinel限流

1&#xff09;gateway添加sentinel相关依赖 <spring-cloud.version>2021.0.1</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version><dependencies><!--gateway--><dependency><gro…

面试redis篇-11Redis集群方案-哨兵

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下: 监控:Sentinel 会不断检查您的master和slave是否按预期工作自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主通知:Sentinel充当…

POST参数里加号+变成空格的问题处理

今天遇到个这样的问题&#xff0c;从前端传到后端的加密报文&#xff0c;里面包含了号&#xff0c;但在后端日志输出看出&#xff0c;变成空格。这个是由于经过RSA加密后引起的 解决办法&#xff1a; 1.前端转码&#xff1a;使用encodeURIComponent对参数进行转码 2.后端解码…

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; …