Redis:十大数据类型

键(key)

常用命令

1. 字符串(String)

1.1 基本命令

  • set key value

 如下:设置kv键值对,存货时长为30秒

  • get key 
  •  mset key value [key value ...]
  • mget key [key ...]

同时设置或者获取多个键值对

  •  getrange

获取指定区间范围内的值,类似between......and的关系

从零到负一表示全部

  • setrange

设置指定区间范围内的值,格式是setrange key值 具体值 

  • setnx key value
  • setex 设置带过期时间的键
  • setex 键 秒 值

1.3 应用场景

  • 视频点赞
  • 是否喜欢文章 

2. 列表(List) 

2.1 简介 

 单key多value

2.2 常用命令

2.3 应用场景

  • 微信公众号消息订阅 

 3. 哈希(Hash)

3.1 简介

kv模式不变,但是v是一个键值对

3.2 常用命令

4. 集合(Set)

4.1 简介 

 单键多value且value无重复

4.2 常用命令

4.3 应用场景

  •  微信小程序抽奖
  •  微信朋友圈点赞查看同赞好友
  •  QQ推可能认识的朋友

5. 有序集合(Zset) 

5.1 简介

在set基础上添加一个score分数

之前是set k1 v1 v2 ...

现在是Zset k1 score1 v1 score2 v2 ...

5.2 常用命令

5.3 应用场景

  • 排行榜展示 

6. 位图(bitmap)

6.1 简介

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

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

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

概括 

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

 6.2 需求场景

  • 用户每日登录
  • 用户每日是否点击广告
  • 钉钉签到,上班打卡

6.3 基本命令

  • setbit

setbit key offset value  

含义:将key位图偏移量为offset的数据设为value

key:要操作的位图键名

offset:操作该位图哪一位的数据(数据偏移量)

value:只能是0或者1

  • getbit

getbit key offset

含义:获取key位图偏移量为offset上的value值

key:要操作的位图键名

offset:偏移量

  • strlen

strlen key

含义:获取key位图所占用的字节大小

返回8的整数位,因为8bit等于1字节,位图按照字节进行扩容

如:此时该位图开辟到第九个bit位空间时,将返回2字节即该位图空间占用为2字节

  •  bitcount

bitcount key

含义:统计key位图上所有bit位值为1的总和进行返回

  • bitop

bitop and key key1 [key2 ...]

含义:将key1、key2等等key中内容一样的值统计到key中,后通过bitcount可查到内容一样的值有多少

如下:将用户2001和2002中同一个bit位中值一样的数据统计到k2中,后通过bitcount命令返回k2存的值 

127.0.0.1:6379> setbit 2001 0 1
(integer) 0
127.0.0.1:6379> setbit 2001 1 1
(integer) 0
127.0.0.1:6379> setbit 2001 2 1
(integer) 0
127.0.0.1:6379> setbit 2001 3 1
(integer) 0
127.0.0.1:6379> setbit 2002 2 1
(integer) 0
127.0.0.1:6379> setbit 2002 3 1
(integer) 0
127.0.0.1:6379> setbit 2002 4 1
(integer) 0
127.0.0.1:6379> bitop and k2 2001 2002
(integer) 1
127.0.0.1:6379> bitcount k2
(integer) 2

 7. 基数统计(HyperLogLog)

7.1 简介

 基数统计:用于统计数据集中去重后剩余的元素个数

7.2 需求场景

  •  统计某个网站的uv,某个文章的uv

uv:unique visitor独立访客,可理解为用户IP

为防止某些用户进行刷单或者刷访问量即可用到基数统计,将所有uv相同的去重后统计进行统计

7.3 基本命令

127.0.0.1:6379> pfadd p1 1 1 1 2 3 4  #将数据添加到类型为HyperLogLog的p1中
(integer) 1                           #返回1为true
127.0.0.1:6379> pfadd p2 2 2 2 2 3
(integer) 1
127.0.0.1:6379> pfcount p1            #去重
(integer) 4                           #去重后的实际个数
127.0.0.1:6379> pfcount p2
(integer) 2                          
127.0.0.1:6379> pfmerge destkey p1 p2 #将p1和p2结果集合并到名为destkey的结果集中
OK
127.0.0.1:6379> pfcount destkey
(integer) 4

8. 地理空间(GEO)

8.1 简介

移动互联网时代LBS应用越来越多,交友软件中附近的小姐姐、外卖软件中附近的美食店铺、高德地图附近的核酸检查点等等,那这种附近各种形形色色的XXX地址位置选择是如何实现的?

 

地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。

例如滴滴打车,最直观的操作就是实时记录更新各个车的位置,

然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆

 

使用如下SQL即可:

select taxi from position where x0-r < x < x0 + r and y0-r < y < y0+r

但是这样会有什么问题呢?

1.查询性能问题,如果并发高,数据量大这种查询是要搞垮数据库的

2.这个查询的是一个矩形访问,而不是以我为中心r公里为半径的圆形访问。

3.精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差

8.2 基本命令

  • GEOADD

多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定key中

  •  GEOPOS

从键里面返回所有给定位置元素的位置(经度和纬度)

  • GEODIST

返回两个给定位置之间的距离 

  • GEORADIUS

 以给定经纬度为中心,返回与中心距离不超过最大指定距离的所有元素

  • GEOHASH 

weixinwei'xin

 9. 流(Stream)

9.1 简介

Redis版的MQ消息中间件+阻塞队列

实现消息队列,支持消息队列持久化、支持自动生成全局唯一id、支持ack消息确认模式、支持消费组模式,让消息队列更加安全可靠

一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容

1
Message Content
消息内容
2
Consumer group
消费组,通过XGROUP CREATE 命令创建,同一个消费组可以有多个消费者
3
Last_delivered_id
游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。
4
Consumer
消费者,消费组中的消费者
5
Pending_ids
消费者会有一个状态变量,用于记录被当前消费已读取但未ack的消息Id,如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack它就开始减少。这个pending_ids变量在Redis官方被称之为 PEL(Pending Entries List),记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符),它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理

 9.2 基本命令

  • 队列相关指令

  • 消费组相关指令

四个特殊符号

  •  - + 表示最小和最大出现的id
  • $ 表示只消费新的消息,当前流中最大id,可用于将要到来的消息
  • > 表示从第一条尚未被消费的消息进行读取
  • * 用于XADD命令中,自动生成id,类似于MySQL中的自增id 

10. 位域(bitfield)

了解即可

常用命令

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

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

相关文章

【NPU 系列专栏 2.6 -- - NVIDIA Xavier SoC】

文章目录 NVIDIA Xavier SoCXavier 主要组件Xavier SoC 的型号Xavier SoC 的算力Xavier AGXXavier NXXavier 应用场景自动驾驶机器人物联网(IoT)医疗设备NPU 对比SummaryNVIDIA Xavier SoC 英伟达 Xavier SoC 是英伟达推出的一款高性能系统级芯片,专门为人工智能(AI)和自…

scratch聊天机器人 2024年6月scratch四级 中国电子学会图形化编程 少儿编程等级考试四级真题和答案解析

目录 scratch聊天机器人 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 s…

面试题:为什么 一般 weight 选择对称量化,activation 选择非对称量化?

模型的剪枝是为了减少参数量和运算量&#xff0c;而量化是为了压缩数据的占用量。 量化概念 所谓的模型量化就是将浮点存储&#xff08;运算&#xff09;转换为整型存储&#xff08;运算&#xff09;的一种模型压缩技术。 优势&#xff1a; 可以提升计算效率&#xff1b;减少…

泛微开发修炼之旅--40考勤管理篇:根据班次规则、考勤组规则(含固定值和排班制),在三方系统中获取考勤签到数据,并同步到考勤管理中的解决方案

一、需求描述 我们最近在项目上遇到了一个需求&#xff0c;需要将工厂门禁刷脸数据&#xff0c;通过考勤管理配置的规则&#xff0c;获取到对应的考勤签到数据&#xff0c;依次作为上下班打卡的时间&#xff0c;以此作为员工每天考勤的依据&#xff0c;客户的考勤比较复杂&…

《python程序语言设计》第6章15题财务应用程序:打印税款表。利用程序清单4-7的代码

6.15 打印税款表 def computeTax(status_n, income):tax 0if status_n 0:if income < 8350:tax income * 0.10elif income < 33950:tax 8350 * 0.10 (income - 8350) * 0.15elif income < 82250:tax 8350 * 0.10 (33950 - 8350) * 0.15 (income - 33950) * 0.…

《九界ol游戏源码》(游戏源码+客户端+服务端+工具+视频教程)喜欢研究游戏源码的看过来...

《九界》游戏以网络同名热门小说为文化蓝本&#xff0c;构筑了一个地海陆空四维冒险的庞大游戏世界。《九界》以“团队修真”为核心研发理念&#xff0c;引擎采用OGRE引擎&#xff0c;GUI的设计采用CEGUI&#xff0c;游戏设计&#xff0c;地图&#xff0c;音效都是花费了相当的…

哈默纳科HarmonicDrive谐波减速机的使用寿命计算

在机械传动系统中&#xff0c;减速机的应用无处不在&#xff0c;而HarmonicDrive哈默纳科谐波减速机以其独特的优势&#xff0c;如轻量、小型、传动效率高、减速范围广、精度高等特点&#xff0c;成为了众多领域的选择。然而&#xff0c;任何机械设备都有其使用寿命&#xff0c…

Python爬虫-中国汽车市场月销量数据

前言 本文是该专栏的第34篇,后面会持续分享python爬虫干货知识,记得关注。 在本文中,笔者将通过某汽车平台,来采集“中国汽车市场”的月销量数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废话不多说,下面跟着笔者直接往下看正文详细内容。(附…

硅纪元视角 | 语音克隆突破:微软VALL-E 2,Deepfake新纪元!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

Web前端知识视频教程分享(五) Bootstrap

资料下载地址&#xff1a; https://545c.com/f/45573183-1336822373-45bb4f?p7526 (访问密码: 7526)

Flink内存管理机制

前言 在Flink的后台界面&#xff0c;可以看到整个Flink的内存情况。 如JobManager的内存情况&#xff1a; TaskManager的内存情况 一、Flink内存管理 Flink TaskManager内存组成整体结构图如下&#xff1a; 二、总内存管理 三、JobManager内存管理内存管理 四、TaskManager内…

vue3前端架构---打包配置

最近看到几篇vue3配置项的文章&#xff0c;转载记录一下 Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案-CSDN博客文章浏览阅读2k次&#xff0c;点赞8次&#xff0c;收藏9次。Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页…

Lago - 使用 ClickHouse 扩展事件引擎

本文字数&#xff1a;4540&#xff1b;估计阅读时间&#xff1a;12 分钟 作者&#xff1a;Mathew Pregasen 本文在公众号【ClickHouseInc】首发 本周&#xff0c;我们欢迎来自 Lago 的一篇博客文章&#xff0c;介绍了他们如何使用 ClickHouse 扩展一个事件引擎&#xff0c;并在…

学习react-Provider解决props需要层层传递问题

1.组件数据传递问题 数据传递&#xff1a;A(顶级组件&#xff09;-》B组件&#xff08;子组件&#xff09;、C组件&#xff08;孙子组件&#xff09;…很多组件 这样得通过props层层传递到下面的组件 还有另一种解决方法&#xff0c;即通过全局对象来解决&#xff0c;使用Prov…

堆的实现-适用于算法竞赛

首先讲一下能够实现的操作。 插入一个数查找最小值删除最小值删除任意一个元素修改任意一个元素 什么是堆&#xff1f; 堆其实是一棵完全二叉树。 即处理叶子节点和倒数第一层节点&#xff0c;其他节点都有两个子节点&#xff0c;而且顺序是从上到下&#xff0c;从左到右。 …

使用VMware安装Linux虚拟机

一、下载 通过百度网盘分享的文件&#xff1a;CentOS系统安装包 链接&#xff1a;https://pan.baidu.com/s/1_eqYl8HcNt2GcGDjgOElgg 提取码&#xff1a;cu07 二、安装 &#xff08;1&#xff09;双击打开软件 &#xff08;2&#xff09; 创建新的虚拟机 &#xff08;3&…

PyQt ERROR:ModuleNotFoundError: No module named ‘matplotlib‘

Solution:打开cmd输入指令下载malplotlib pip install matplotlib

微软第四季度财报预览:增长动力追踪

微软公司即将在2024年7月30日&#xff08;周二&#xff09;美国市场收盘后发布第四季度财务结果。 微软的收益 - 预期如何 美股券商开户通道 市场预计&#xff0c;微软即将到来的2024年第四季度的收入将年增长14.5%&#xff0c;达到644亿美元&#xff0c;高于2023年第四季度…

linux添加普通用户后无法使用K8S的kubectl命令怎么办/Linux普通用户管理K8S/Linux下普通用户无法使用K8S命令

1.给Linux添加普通用户 sudo useradd mqq #添加mqq账号 sudo passwd mqq #给mqq账号设置密码&#xff0c;需要输入2次&#xff0c;我输入密码是Admin1232.利用mqq用户输入K8S命令报错 3.给mqq用户提权 suduers文件位于路径/etc/sudoers #编辑文件/etc/sudoers vim /etc/su…

Matlab编程资源库(10)离散傅立叶变换

一、离散傅立叶变换算法简要 给定一个N点的离散信号序列x(n)&#xff0c;其中n表示时刻&#xff0c;n 0, 1, 2, ..., N-1。 定义离散傅立叶变换的频域序列X(k)&#xff0c;其中k表示频率&#xff0c;k 0, 1, 2, ..., N-1。 通过以下公式计算每个频率对应的复数值&#xff…