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)

了解即可

常用命令

相关推荐
得物技术15 分钟前
基于Redis内核的热key统计实现方案|得物技术
redis
Allen Bright32 分钟前
Redis主从架构
数据库·redis·架构
ZHOU西口36 分钟前
MySQL系列之远程管理(安全)
数据库·mysql·安全·tls·加密连接·require_secure
fcopy44 分钟前
Golang项目:实现生产者消费者模式
缓存·golang
Karoku0661 小时前
【docker集群应用】Docker网络与资源控制
运维·数据库·docker·容器
2301_793086871 小时前
springboot+redis+lua实现分布式锁
spring boot·redis·lua
扬子鳄0082 小时前
Spring Boot自动配置机制
java·数据库·spring boot
秋意钟2 小时前
sql漏洞
数据库·oracle
cdut_suye2 小时前
C++11新特性探索:Lambda表达式与函数包装器的实用指南
开发语言·数据库·c++·人工智能·python·机器学习·华为
点点滴滴的记录2 小时前
延迟队列调研
redis