目录
Redis简介
安装配置(Windows)
GUI工具RedisInsight的使用
十大数据类型(5基本5高级)
字符串String
列表List
集合Set(S)
有序集合SortedSet(Z)
哈希Hash(H)
发布订阅模式
消息队列Stream(X)
地理空间Geospatial(GEO)
HyperLogLog(PF)
位图Bitmap(BIT)
位域BitField
事务
数据持久化
主从复制
哨兵模式
Redis简介
-
官网:Redis 教程_redis教程
-
Remote DIctionary server是一个开源的基于内存的数据存储系统
-
作用
-
数据库DB缓存Cache
-
消息队列MQ
-
......
-
最热门NoSQL数据库之一
-
-
Mysql
-
基于磁盘IO,读写操作速度与内存相比非常慢
-
Redis:基于内存的数据存储系统
-
-
使用方式
-
命令行界面CLI(Command Line Interface)
-
应用程序接口API(Application Programming Interface)
-
图 形用户界面GUI(Graphical User Interface)
-
安装配置(Windows)
-
WSL-安装Linux系统-安装Redis
-
Docker-下载Redis镜像-运行Redis
-
安装文件-简单(but比较老的5.0版本)
-
MAC/Linux启动服务:redis-server
-
Windows:redis-server.exe
-
启动客户端:redis-cli
-
GUI工具RedisInsight的使用
-
优点
-
更方便操作redis
-
直观看到redis的内存使用情况
-
自带所有命令的说明文档
-
本地连接到远程的redis服务
-
十大数据类型(5基本5高级)
-
redis中的数据以键值对key-value存储
-
默认使用字符串存储数据,二进制安全
字符串String
-
设置:set key value
-
取值:get key(区分大小写)
-
删除:del key
-
flushall:把数据库里面的键都删除掉(慎用)
-
-
判断是否存在:exists key
-
查找:keys+
-
*:所有
-
*me:以me结尾的键
-
-
登录:redis-cli --raw
-
以原始的形式显示内容
-
如果设置键值对用了中文,会以二进制的形式输出,所以要--raw
-
-
清空页面:clear
-
设置一个带有过期时间(释放内存,用户校对)的键值对
-
TTL key(Time to live):查看过期时间
-
expire key 10:设置过期时间10s
-
setex key 10 value:设置一个带有过期时间的键值对
-
setnx key value:只有当键不存在时才设置键的值,键存在则不做任何动作
-
列表List
-
一般用来存储和操作一组有顺序的数据
-
LPUSH key value1 [value2] :将一个或多个值插入到列表头部
-
LRANGE key start stop:获取列表指定范围内的元素
-
start:0|stop:-1则可获取从第一个到最后一个
-
-
RPOP key:移除并获取列表最后一个元素
-
后面加个n:表示要删除的列表头部元素个数
-
-
LLEN key:获取列表长度
-
RPOPLPUSH source destination: 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
-
实现了一个最简单的先进先出队列
-
-
LTRIM key start stop:列表只保留指定区间内的元素
集合Set(S)
-
列表中的元素可以重复
-
set中的元素不可重复,不具有顺序
-
SADD key member1 [member2]: 向集合添加一个或多个成员
-
SISMEMBER key member:判断元素是否在集合中
-
SREM key member1 [member2]:删除集合中一个或多个成员
-
集合运算:交集 并集 差集
有序集合SortedSet(Z)
-
每个元素都会关联一个浮点类型的分数,从而对元素进行从小到大的排序
-
元素唯一,但分数可重复
-
ZADD key score1 member1 [score2 member2]: 向有序集合添加一个或多个成员,或者更新已存在成员的分数
-
ZRANGE key start stop: 通过索引区间返回有序集合成指定区间内的成员
-
0 -1:所有
-
后+ [WITHSCORES] :同时显示分数
-
-
ZSCORE key member:返回成员的分数值
-
ZREVRANK key member:反转,有序集成员按分数值递减(从大到小)排序
-
ZRANK key member:指定成员的索引
-
ZREM key member :删除成员
哈希Hash(H)
-
一个string类型的field和value的映射表(键值对集合)
-
适合存储对象
-
HSET key field value:将哈希表 key 中的字段 field 的值设为 value
HSET person name lisi HSET person age 100
-
HGET key field:获取指定字段的值
-
HGETALL key:获取在哈希表中指定 key 的所有字段和值
-
HDEL key field1 [field2]: 删除一个或多个哈希表字段
-
HEXISTS key field:判断某个键值对是否存在
-
HKEYS key:获取所有哈希表中的字段
-
HLEN key:获取哈希表中字段的数量
发布订阅模式
-
发送者(pub)发送消息,订阅者(sub)接收消息
-
局限性:
-
消息无法持久化
-
无法记录历史信息
-
-
SUBSCRIBE channel [channel]: 订阅一个或多个频道的信息
-
PUBLISH channel message: 将信息发送到指定的频道
消息队列Stream(X)
-
轻量级:解决发布订阅功能的局限性
-
XADD key id field value:添加一条消息
-
id:*自动生成一个消息的id
-
-
XLEN key:查看Stream中消息的数量
-
XRANGE key start end [COUNT count]:查看消息中的详细内容
-
start-;end+:所有消息
-
-
XDEL key id[id...]:删除消息
-
XTRIM key MAXLEN | MINID [ = | ~ ] threshold [LIMIT count]
-
MAXLEN 0:删除所有消息
-
-
XREAD COUNT count BLOCK milliseconds STREAMS key [key...] id [id...]:读取消息
-
COUNT 2:一次读取两条消息
-
BLOCK 1000:没有消息的话就阻塞1000ms(1s)
-
id
-
0:表示从头开始读取
-
$|>:读取最新消息
-
-
-
XGROUP CREATE key id | $ [MKSTREAM] [ENTRIESREAD entries-read]:创建消费者组
-
XINFO GOURPS key:查看消费者组的信息
-
XGROUP CREATECONSUMER key group consumer:添加消费者
-
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key id:读取消息(被消费)
地理空间Geospatial(GEO)
-
存储地理位置信息的数据结构
-
支持对地理位置进行各种计算操作
-
GEOADD key [NX|XX] [CH] longitude latitude member:添加一个地理位置信息
GEOADD city 116.405285 39.904989 beijing //经度纬度
-
GEOPOS key member:获取某个位置的经纬度
-
GEODIST key member1 member2:计算两个地理位置之间的距离
-
默认单位为m
-
想换算成km,则在后面加上km
-
-
GEOSEARCH key frommember member | FROMLONGLAT longitude latitude :搜索指定范围内的成员
-
FROMLONGLAT
-
BYRADIUS 300km:圆形范围,半径
-
BYBOX:矩形范围
-
-
HyperLogLog(PF)
-
一种用来做基数(一个集合中不计算重复元素的个数)统计的算法
-
适合用来做一些对精确度要求不高,而且数据量非常大的统计工作
-
统计网站的UV
-
统计某个词的搜索次数
-
-
PFADD key element [element ...]:添加指定元素到 HyperLogLog 中
-
PFCOUNT key [key ...]:查看基数估算值
-
PFMERGE key sourcekey [sourcekey ...]:合并 HyperLogLog
位图Bitmap(BIT)
-
字符串类型的扩展:使用String类型来模拟一个Bit数组
-
支持位运算:与 或 非
-
应用场景:
-
记录用户的签到情况
-
在线状态
-
有没有点赞
-
等等
-
-
SETBIT key offset value:设置某个偏移量的值
SETBIT dianzan 0 1 SETBIT dianzan 1 0
-
SET key value
SET dianzan "\xF0"
-
16进制可以一次性设置多个位的值
-
-
GETBIT key offset:获取点赞的每一位值
-
BITCOUNT key [start end[BYTE|BIT]]:统计数量
-
BITPOS key bit [start end[BYTE|BIT]]:用来获取某个key里面第一个出现0或者1的位置
位域BitField
-
将很多小的整数存储到一个较大的位图中
-
更加高效地使用内存
-
-
例子
-
开发了一个游戏,可以利用位域来记录每个玩家在游戏中的一些关键信息(金钱、等级、是否在线等)
-
-
BITFIELD key [GET encoding offset | [OVERFLOW WRAP | SATLEATL]:设置
-
将get改成set:获取
-
-
GET key:查看内存中现在的情况
事务
-
可以一次执行多个任务
-
某一个命令执行失败,后面的命令依然执行
-
-
MULTI:用于开启一个事务
-
事务开启后,所有的命令都会被放入到一个队列中
-
-
EXEC:执行事务中的所有命令
-
MULTI:事务块开始
-
EXEC
数据持久化
-
redis是一个基于内存的数据库,没有持久化:服务器重启or断电,所有数据都会丢失
-
两种持久化
-
RDB(Redis Database)方式
-
适合备份
-
在指定时间间隔内,将内存中的数据快照写入磁盘。是某一个时间点上数据的完整副本
-
可通过配置文件中的save参数来配置
-
-
AOF(Append Only File)方式
-
追加文件
-
执行写命令的时候,不仅会将命令写入到内存中,同时将命令写入到一个追加的AOF文件中
-
以日志的形式记录每一个写操作
-
开启AOF方式:在配置文件中将append only这个参数的值改为yes
-
-
主从复制
-
将一台redis服务器(主节点)的数据复制到其他的redis服务器(从节点)
-
一对多
-
单向复制
-
主节点:写操作,异步发送
-
从节点:读操作,主动更新
-
-
配置主从复制
-
只需要修改从节点的配置(2种)
-
通过命令行执行命令
-
通过配置文件来修改
-