深度研究redis
Redis 的 key 操作:
1.keys* 查看当前库所有的key
2.exists key 判断某个key是否存在
3.type key 查看你的key是什么类型
4.del key 删除指定的key数据
5.unlink key 根据value选择非阻塞删除
6.expire key 10 给定key设置过期时间
7.ttl key 查看key还有多少秒过期 -1表示永不过期 -2表示已过期
8.select 切换数据库
9.dbsize 查看当前数据中的key数量
10.flushbd 清空当前库
11.flushall 通杀全部库
Redis字符串 String:
String是Redis最基本的类型,也是二进制安全的,意味着Redis的String可以包含任何数据,包括图片或者序列化对象,一个Redis中字符串的Value最多可以是512M
String类型的常用命令:
1.set <key><value>添加键值对
2.get <key> 查询对应键值
3.append <key><value>将给定的<value>追加到原值的末尾
4.strlen <key>获取值得长度
5.setnx <key><value> 只有在key不存在时,设置key的值
6.incr <key> 将key中存储的数字加1,只能对数字值操作,如果为空,新增值为1
7.decr <key> 将key中存储的数字减1,只能对数字值操作,如果为空,新增值为-1
8.incrby / decrby <key><步长> 将key中存储的数字值增减,自定义步长
9.mset <key1><value1><key2><value2> 同时设置一个或多个键值对
10.mget <key1><key2> 同时获取一个或多个value
11.msetnx <key1><value1><key2><value2> 同时设置一个或者多个键值对,当且仅当所有给定的key都不存在
12.getrange <key><起始位置><结束位置> 获取值得范围
13.setex <key><过期时间><value> 设置键值的同时,设置过期时间,单位秒
14.getset <key><value>以旧换新,设置新值同时获取旧值
Redis列表 List:
Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素刀列表的头部或者尾部,底层实际上是双线链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能较差
List的常用命令:
1.lpush/rpush <key1><value1><value2><value3> 从左边/右边插入一个或者多个值
2.lpop/rpop <key1> 从左边/右边取出一个值,值在键在,值光键亡
3.rpoplpush <key1><key2> 从<key1>列表右边取出一个值插入到<key2>列表左边
4.lrange <key1><start><stop> 按照索引下标获取元素(从左到右)如果是0 -1 表示获取所有 0表示左边第一个,-1表示右边第一个
5.lindex <key1><value1> 按照索引下标获取元素(从左到右)
6.llen <key> 获取列表长度
7.linsert <key> before/after <value> xxx 在value前面/后面插入xxx值
8.lrem <key><n><value> 从左边删除n个value(从左到右)
9.lset <key1><index><value> 将列表key下标为index的值替换成value
Redis集合 Set:
可以自动排重,并且提供了某个成员是否在一个set集合内的重要接口,这个是list不能提供的,是String类型的无序集合,底层是一个value为null的hash表,所以添加,删除,查找得复杂度欧式O(1)
Set常用命令:
1.sadd <key><value1><value2> 将一个或多个member元素加入奥集合key中,已经存在的member元素将被忽略
2.smember<key> 取出该集合的所有值
3.sismember <key><value> 判断集合<key>是否含有<value>值,1便是有 0表示没有
4.scard<key> 返回该集合的元素个数
5.srem<key><value1><value2> 删除集合中的某个元素
6.spop<key> 随机从该集合中取出一个值
7.srandmember<key><n> 随机从该集合中取出n个值,不会从集合中删除
8.smove<source><destination>value 把集合中一个值从一个集合移动到另一个集合
9.sinter<key1><key2> 返回两个集合的交集元素
10.sunion<key1><key2>返回两个集合的并集元素
11.sdiff<key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)
Redis哈希 Hash:
是一个键值对集合,适合存储对象,类型map
Hash常用命令:
1.hset <key><field><value> 给<key>集合总的<field>键赋值<value>
2.hget <key><field>从t<key>集合<field>取出value
3.hmset <key><field1><value1><field2><value2> 批量设置hash的值
4.hexists <key1><field> 查看hash表key,判断定域field是否存在
5.hkeys <key>列出该hash集合的所有field
6.hvals <key>列出该hash集合的所有value
7.hincrby <key><field><increment>为哈希表key中的域field的值加上1
8.hsetnx <key><field><value>将哈希表key中的域field的值设置为value,当且仅当field不存在
Redis有序集合 Zset:
Redis有序集合zSet与普通集合set非常相似,是一个没有重复元素的字符串集合,不同之处是有序集合的成员都关联着一个评分,这个评分用来按照最低分刀最高分的方式排序集合中的成员,集合的成员是唯一额,但是评分可以重复
zSet常用命令:
1.zadd <key><score1><value1><score2><value2> 将一个或者多个member元素及其score值加入到有序集合key中
2.zrange <key><start><stop> withscores 返回有序集合key中,下标在<start><stop>之间的元素,带withscores,可以让分数一起和值返回到结果集
3.zrangebyscore key minmax withscores limit offset count 返回有序集合key中,所有score值介于min和max之间的成员,有序集合成员按core值递增从小到大排列
4.zrevrangebyscore key minmax withscores limit offset count 返回有序集合key中,所有score值介于min和max之间的成员,有序集合成员按core值递增从大到小排列
5.zincrby <key><increment><value> 为元素的score加上增量
6.zrem <key> <value> 删除该集合下指定值的元素
RDB:
之所以有写时复制技术,是防止redis突然挂掉造成数据不同步,而有了这个技术,会生成一个临时文件,用来写到rdb文件中,但是也有一个缺点,就是最后一次持久化后数据可能会造成丢失
优势:1.适合大规模的数据恢复
2.对数据完整性和一致性要求不高更适合使用
3.节省磁盘空间
4.恢复速度快
AOF:
以日志的形式来记录每个写操作,不记录读操作,把指令记录下来,只追加文件但不改写文件
如果RDB和AOF同时开启,系统默认取AOF得数据(数据不会存在丢失)
持久化流程:
1.客户端的请求写命令会被append追加到AOF的缓冲区内
2.AOF缓冲区根据AOD持久化策略【always,everyseec,no】将操作sync同步到磁盘的AOF文件中
3.DOF文件大小超过重写策略或者手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量
4.当redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的
优势:
1.备份机制更稳健,丢失数据的概率更低
2.可读的日志文本,通过操作AOF,可以处理误操作
劣势:
1.比RDB占用更多的磁盘空间
2.恢复备份速度更慢
3.每次读写都同步的话,有一定的性能压力
4.存在bug,造成恢复不能
小总结:
1.对数据不敏感,单独使用RDB
2.不建议单独使用AOF,会存在bug
主从复制:
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主,进行读写分离,性能得到扩展,以及容灾快速恢复
分布式锁:
解决上锁之后突然异常,无法设置过期时间的问题:set users nx ex 10 (nx表示上锁,ex表示过期时间)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)