提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

1. 类型补充

官网数据类型

1.1 stream类型

sream类型可以用来模拟实现事件传播的机制,如果有事件产生,就把事件插入stream中,然后消费者监听stream,去消费事件

stream其实就是一个阻塞队列,这个就是作为一个消息队列的重要支撑,属于是list与blpop的升级版本

Basic commands
XADD adds a new entry to a stream.
XREAD reads one or more entries, starting at a given position and moving forward in time.
XRANGE returns a range of entries between two supplied entry IDs.
XLEN returns the length of a stream.
XDEL removes entries from a stream.
XTRIM trims a stream by removing older entries.

这是基本命令

1.2 geospatial

Basic commands
GEOADD adds a location to a given geospatial index (note that longitude comes before latitude with this command).
GEOSEARCH returns locations with a given radius or a bounding box.
See the complete list of geospatial index commands.

这个意思是地理空间,这个主要是用来存储坐标的(经纬度),存储一些点之后,就可以给定一个点,从存储中的点里面去查找(按照半径来查找),比如百度地图,高德地图

> GEOADD bikes:rentable -122.27652 37.805186 station:1
(integer) 1
> GEOADD bikes:rentable -122.2674626 37.8062344 station:2
(integer) 1
> GEOADD bikes:rentable -122.2469854 37.8104049 station:3
(integer) 1
> GEOSEARCH bikes:rentable FROMLONLAT -122.2612767 37.7936847 BYRADIUS 5 km WITHDIST
1) 1) "station:1"
   2) "1.8523"
2) 1) "station:2"
   2) "1.4979"
3) 1) "station:3"
   2) "2.2441"

1.3 hyperloglog

应用场景:估算集合中的元素个数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 bitmaps位图

使用比特位来表示整数

SETBIT sets a bit at the provided offset to 0 or 1.
GETBIT returns the value of a bit at a given offset.

> SETBIT pings:2024-01-01-00:00 123 1
(integer) 0
> GETBIT pings:2024-01-01-00:00 123
1
> GETBIT pings:2024-01-01-00:00 456
0

在这里插入图片描述
在这里插入图片描述

1.5 bitfields位域

位段:也叫做位域,和C语言中的结构体中的位域有点类似

BITFIELD atomically sets, increments and reads one or more values.
BITFIELD_RO is a read-only variant of BITFIELD.

> BITFIELD bike:1:stats SET u32 #0 1000
1) (integer) 0
> BITFIELD bike:1:stats INCRBY u32 #0 -50 INCRBY u32 #1 1
1) (integer) 950
2) (integer) 1
> BITFIELD bike:1:stats INCRBY u32 #0 500 INCRBY u32 #1 1
1) (integer) 1450
2) (integer) 2
> BITFIELD bike:1:stats GET u32 #0 GET u32 #1
1) (integer) 1450
2) (integer) 2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 渐进式遍历-scan

Redis 使⽤ scan 命令进⾏渐进式遍历键,进⽽解决直接使⽤ keys 获取键时可能出现的阻塞问题。每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执⾏多次 scan。不像keys *一下子就全部都来了

每次scan就是获取一小部分的key

在这里插入图片描述

cursor就是光标,下标,为0表示这次遍历从头开始
count表示遍历的个数
返回值的前半部分告诉的是拟下次继续遍历,光标要从哪里开始
后半部分就是真正遍历的key

注意这个光标并不是下标,并不是连续递增的,就是一个字符串,所以第二次返回的光标是7,只有redis服务器知道这个光标对应的元素位置了

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

时间复杂度:O(1)
返回值:下⼀次 scan 的游标(cursor)以及本次得到的键。

pattern其实和keys命令的pattern是一样的道理
count就是限制这次遍历的个数,这是一个提示,并不是一定返回count个个数
TYPE :表示获取指定类型的key

> flushall
OK
> set key1 111
OK
> mset key2 222 key3 333 key4 444 key5 555 key6 666 key7 777 key8 888 key9 999
OK
> scan 0
0
key5
key4
key9
key3
key1
key7
key8
key2
key6

返回0就表示遍历一次结束了

> scan 0 count 3
10
key5
key4
key9
> scan 10 count 3
14
key3
key1
key7
> scan 14 count 3
7
key8
key2
key6
> scan 7 count 3
0

count可以设置为不一样的

除了 scan 以外,Redis ⾯向哈希类型、集合类型、有序集合类型分别提供了 hscan、sscan、zscan 命令,它们的⽤法和 scan 基本类似

渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。

3. 数据库管理命令

一个mysql服务器上有很多的database,一个database上有很多的表
redis中的database是现成的,默认redis提供了16个数据库,数据库之间的数据是相互隔离的,默认使用的是0号数据库

切换数据库

 select dbIndex
> select 1
OK
> get key1
null
> select 0
OK
> get key1
111

最大选择15数据库

Redis 提供了⼏个⾯向 Redis 数据库的操作,分别是 dbsize、select、flushdb、flushall 命令,

dbsize:获取当前数据库中key的个数

flushdb:删除当前数据库中所有的key

flushall :删除所有数据库中所有的key

4. redis客户端

更多的时候是使用redis的api,用程序来操作redis

4.1 认识resp

传输层有UDP,TCP这些协议,这些协议我们只能选择,不能修改
而在应用层我们可以自定义协议,比如redis就是自定义应用层协议的
作为redis第三方,我们要开发redis的客户端,就要知道redis的应用层协议才可以
redis的应用层协议—》官网上有

resp

但是qq和王者这些并没有公开应用层协议,所以不能开发他们对应的客户端

redis本身是基于TCP了

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
按照上述格式构造出字符串,往tcp socket中写入

这个协议已经公开很久了—》很多人已经实现了这套协议的解析和构造了,我们只需要调用就可以了

4.2 访问github技巧

游戏加速器可以访问:比如steam++,改名为watt tools

总结

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐