Reids
2021-02-24 17:08:24 18 举报
AI智能生成
Redis笔记
作者其他创作
大纲/内容
Reids
String 类型
获取数据常用命令
字符串操作常用命令
mset
一次性设置多个键值对
mget
一次性获取多个键值对
append
追加字符串
getRange
获取从指定位置开始到结束位置的字符串,如果结束位置为-1则获取从开始到最后一个字符
setRange
覆盖从指定位置开始的字符串
strLen
获取字符串长度
数值字符常用命令
incr
数值加一
incrBY
增加指定数值
derc
数值减一
dercBY
减去指定数值
incrBYfloat
加float类型的数值
GetSet
可以在一个操作中设置一个新值,返回旧值
其他常用命令
type [key]
获取当前值的类型
二进制安全
当Value值为中文的时候会根据不同的编码获取到不同的长度
中文是字节流
在不同编码下,获取到的二进制数值是不同的,为了防止因为不同客户端编码不同而导致乱码的问题
使用 Redis 注意事项
统一编码
如果不进行编码的统一可能会出现乱码的我问题
List 类型
数据结构
双向循环链表结构
支持的数据结构
栈
队列
数组
阻塞,单播队列
提问
1.什么是单播队列
2.在什么情况下需要使用阻塞的单播队列
3.在被阻塞的情况下还可以对Redis进行其他操作么
常用命令
help @List
查看 所有List操作的相关命令
lpush
从第一个数据开始,向第一个数据的左边开始存放数据的方式保存数据
rpush
和lpush命令相反
lpop
以先进先出的方式逐个弹出list中的值,注意这里无论list中存在几条数据每次都只弹出一条数据
LREM
移除某些元素
LInsert [KEY] after [value1] [value2]
在[value1]后面插入[value2]
LInsert [KEY] before [value1] [value2]
在[value1]前面插入[value2]
blpop
当使用这个命令的时候,如果这个key不存在或者没有值,Redis会进入阻塞状态等待其他客户端放入值,当其他客户端放入完成后才会释放其阻塞状态
Ltrim
移除List两端的数据
Hash类型
hset
设置一个值
hget
获取一个值
hmset
设置多个键值对
hmget
获取多个键值对
hkeys
获取所有key的值
hvalues
获取所有值
hgetAll
获取所有键和值
hIncrByFloat
为指定数据增加小数数值
常用操作
数值计算
应用场景
点赞
收藏
详情页
Set类型
特性
去重
无序
可实现功能
实现交集
实现并集
实现差集
可产生随机事件
抽奖
可能出现的问题
可能出现重复抽取
人小于礼物数量该怎么抽
人大于礼物数量该怎么抽
sAdd
添加一个或多个元素
sRem
删除一个或多个元素
sMembers
获取所有元素
sCard
获取集合中元素的个数
Sorted_Set类型
每个值都有一个分值
每个都有一个索引,也可以理解成下标
物理内存左小右大,不随命令发生变化
不可重复
有序
权重操作
zAdd
添加一个元素
zRange
查看 一个元素所有的值
zRangeByScore
给定一个分值的范围,通过分值获取元素例如:获取分值为5到10之间的元素
zScore
通过元素取出分值
zRank
获取元素的排名
zUnionStore
计算给定的numkeys个有序集合的并集
面试相关
Sorted_Set 是如何实现增删改查的速度的
跳跃表
提问?
什么是跳跃表
基础知识
磁盘维度
寻址
毫秒级
带宽
G/M
内存
纳秒
磁盘比内存寻址慢10万倍
秒数时间等级
秒
毫秒
微秒
IO buffer
磁盘扇区
扇区大小:512字节
从磁盘读取数据最少4k
512字节会导致什么问题?为什么会导致索引增大
data page又是什么?又有什么作用
上述问题解答链接:
https://m.yisu.com/zixun/34980.html
数据库基础知识
表变大,性能下降
有索引,增删改变慢
有索引,查询
一个或少量查询依然很快
并发量大会受带宽影响查询速度
早期数据库瓶颈
磁盘关系型数据库
io限制
带宽限制
内存级别关系型数据库
SAP HANA
缺点:
太贵,一个套餐两个亿
数据涨出
数据在内存和磁盘的体积不一样
优点:速度快
解决办法:
折中:缓存
Redis特性
1.单进程、单线程、单实例
2.多路复用
epoll
BIO 阻塞线程
NIO 同步非阻塞
NIO 异步非阻塞
提问:什么是多路复用
要学习多路复用首先必须了解几个东西
1.select系统调用
2.select/poll 和 epoll的区别
和mamcached对比
相同
同样是以键值对的方式存储
不同
value没有数据类型
Redis数据类型
String
bitmaps
String 类型操作
数字类型操作
Hash
哈希表
List
集合
Set
无序集合
Sort Set
有序集合
相关网站
数据库架构选型网站
https://db-engines.com/en/
Redis中文官方网站
http://redis.cn/
Redis
http://redisdoc.com/persistence/bgsave.html
redis-cli
进入Redis 客户端
exit
退出客户端
redis-cli -h
帮助
redis-cli -p 6380
连接端口号为6380的Redis
发布订阅
帮助命令
help @pubsub
Publish
发布一条消息
SubScribe
订阅一条消息
业务场景
聊天系统
解决难题
三天内的聊天历史难题
Redis 事务
MULTI
开启事务
exec
执行事务
Watch
监控一个事务
如何使用这个命令
具体如何进行监控
注意事项
无论那个事务,谁先调用exec则会被优先执行
Redis Modle
布隆(Bloom)过滤器
什么是缓存穿透
如果不解决缓存穿透会发生什么
布隆过滤器是如何解决缓存穿透的
这个需要重新看
Redis 持久化
RDB
快照/副本
时点性
写时复制(copyonwrite)
实现时点性
save命令
bgsave命令
配置文件
RDB缺点
不支持拉链,只有一个dump.rdb
丢失数据相对多
AOF
日志
优点
丢失数据相对少
缺点
相比RDB较慢
Redis 主从复制
linux 知识
管道(pipeline)
管道会触发创建子进程是什么意思
前一个命令的输出会作为后一个命令的输入
pstree
以树状图的方式显示父进程和子进程之间的关系
0 条评论
回复 删除
下一页