Redis
文章平均质量分 54
k-v存储的基于内存的数据库
来深圳
在校大学生
展开
-
缓存穿透&击穿&雪崩
文章目录1. 缓存穿透2. 缓存击穿3. 雪崩问题1. 缓存穿透缓存穿透:缓存和数据库中都没有的数据,导致所有的请求落在数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案:缓存空对象布隆过滤器拦截用户合法性校验2. 缓存击穿redis中某个key过期了或根本没有,大量访问使用该key,数据库访问压力瞬时增加解决方案:实时调整,使key不过期加分布式锁第一个请求的线程可以拿到锁,拿到锁的线程查询到了数据之后设置缓存,其他的线程获取锁失败会等待50ms然后重新到缓存取数原创 2022-05-20 21:47:56 · 84 阅读 · 0 评论 -
缓存一致性问题
文章目录场景可能的方案更新缓存和更新数据库删除缓存和更新数据库推荐方案场景系统使用redis等缓存来提高读性能读请求先读缓存,如果缓存不存在,则从数据库读取,并重建缓存; 同时,写入缓存中的数据,都设置失效时间写请求修改一条数据时,不仅要更新数据库,也要连带缓存一起更新。缓存一致性的重点可能的方案一下几种方案在并发和异常的情况下都会存在不一致问题更新缓存和更新数据库先更新缓存,后更新数据库先更新数据库,后更新缓存缓存利用率低:每次数据发生变更,都「无脑」更新缓存,但是缓存原创 2022-05-16 12:28:01 · 99 阅读 · 0 评论 -
Redis实现分布式锁
什么是分布式锁如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。Redis实现分布式锁时的问题原子性使用lua脚本没有释放锁设置lock的过期时间释放别人的锁为保证只释放自己加的锁,位lockKey设置唯一id, 释放时先判断再释放大量失败的请求使用自旋,或阻塞一段时间后再次抢锁主从复制问题redisson框架为了解决这个问题,提供了一个专门的类:RedissonRedLock,使用了Redlock算法可重入原创 2022-05-11 21:36:10 · 239 阅读 · 0 评论 -
限流算法&分布式限流
目录固定窗口算法滑动窗口算法漏桶算法令牌桶算法分布式限流固定窗口算法固定窗口算法又叫做计数器算法,主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数,当 1 秒内计数达到限流阈值时触发拒绝策略。每过 1 秒,计数器重置为 0 开始重新计数。存在不足:滑动窗口算法滑动窗口算法是对固定窗口算法的改进, 和算法题里所涉及到的滑动窗口算法一样的漏桶算法漏桶算法,又称leaky bucket一个系统处理请求,就像一个固定容量的水桶去溜进来的水,同时也让水流出去,但是它无法预见有多少水流进来和原创 2022-05-05 22:00:29 · 556 阅读 · 0 评论 -
Redis 事务
目录事务Multi, Exec, discardwatch和unwatchwatchunwatch事务Redis事务的主要任务就是串联多个命令, 防止别的命令插队、按顺序地执行Redis事务是一个单独的隔离操作: 事务中的所有命令都会序列化事务执行的过程中, 不会被其他客户端发送来的命令请求所打断Multi, Exec, discard从输入multi命令开始, 输入的命令都会依次进入命令队列, 但不会执行, 直到输入exec后, Redis会将之前的命令队列中的命令依次执行组队的过程中可原创 2022-05-05 10:07:47 · 85 阅读 · 0 评论 -
Redis 主从复制
这里写目录标题概念配置建立复制断开复制安全性只读传输延迟原理复制过程数据同步心跳异步复制概念Redis主从复制,参与复制的Redis实例分为主节点和从节点。以一主多从的模式建立分布系统,是redis搭建高可用集群的基础,为容错、故障转移提供支持配置默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。建立复制配置从节点的方法在配置文件中加入 slaveof {masterHost} {masterPort}启动命令+参数, redis-server原创 2022-05-05 08:55:31 · 1003 阅读 · 0 评论 -
Redis持久化
RDBRDB持久化是把当前进程数据生成快照并保存到磁盘的过程触发机制手动触发save和bgsave命令自动触发配置文件中的save m n 表示m秒内存在n次修改,自动触发bgsave如果从节点全量复制, 主节点自动执行bgsave生成rdb文件,并发送给从节点在没有开启aof时,执行shutdown命令时,自动执行bgsavesave命令阻塞当前Redis服务器,直到RDB过程完成为止bgsave命令AOFAOF(append only file)持久化: 以独原创 2022-05-04 20:48:23 · 148 阅读 · 0 评论 -
Redis全局命令&键管理
全局命令查看所有键keys *keys命令的时间复杂度为O(n),因为keys命令会遍历所有键. 线上环境禁止使用127.0.0.1:6379[2]> KEYS *(empty list or set)127.0.0.1:6379[2]> select 0OK127.0.0.1:6379> KEYS *1) "k1"2) "name"3) "student:2019205242"键总数dbsizedbsize命令的时间复杂度为O(1),因为可以直接获取redi原创 2022-05-03 21:17:25 · 821 阅读 · 0 评论 -
Centos安装Redis
从官网下载最新稳定版wget https://download.redis.io/redis-stable.tar.gztar解压tar -xzvf redis-stable.tar.gz编译安装,首先更新一下gccyum install -y gcc-c++ autoconf automakecd redis-stablemakemake install修改配置文件vim redis.conf===================bind * -::* # all ava原创 2022-05-03 15:16:42 · 527 阅读 · 0 评论 -
Redis入门(一)
查看所有键keys *keys命令的时间复杂度为O(n),因为keys命令会遍历所有键. 线上环境禁止使用127.0.0.1:6379[2]> KEYS *(empty list or set)127.0.0.1:6379[2]> select 0OK127.0.0.1:6379> KEYS *1) "k1"2) "name"3) "student:2019205242"键总数dbsizedbsize命令的时间复杂度为O(1),因为可以直接获取redis内置的键原创 2022-03-05 13:23:48 · 517 阅读 · 0 评论 -
Redis简单动态字符串(SDS)
Redis只会使用C字符串作为字面量。大多数情况下,redis使用SDS作为字符串表示SDS (simple dynamic string)struct sdshdr { int len; //记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度 int free; //记录buf数组中未使用字节的数量 char buf[]; //字节数组,用于保存字符串};C字符串和SDS之间的比较,也是为什么使用SDS的原因:直接通过字段获取字符串长度,提高了效率C字原创 2022-01-21 23:13:27 · 664 阅读 · 0 评论