redis
文章平均质量分 68
一个高性能的 key-value 数据库
husb-052
这个作者很懒,什么都没留下…
展开
-
redis缓存雪崩,缓存穿透,缓存击穿
1.redis和mysql数据的关系2.缓存雪崩2.1概念当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。2.2分析造成缓存雪崩的关键在于在同一时间大规模的key失效。第一种可能是Redis宕机,第二种可能是采用了相同的过期时间。2.3解决方案2.3.1在可接受的时间范围内随机设置key的过期时间,分散key的过期时间,以防止大量的key在同一时刻过期2.3.2延长热点key的过期时间原创 2021-03-21 15:05:40 · 75 阅读 · 0 评论 -
redis实现限流
redis实现限流(list数据结构和令牌桶算法)1.基于Redis的数据结构list1.1实现流程我们可以将请求打造成一个list列表,当每一次请求进来的时候,value用当前时间戳表示。可以清楚判断一段时间的访问次数是否超过限制。2.代码实现<?php /** * 限流:一分钟一个ip只能访问10次 * * */ $redis=new redis(); $redis->connect('127.0.0.1',6379原创 2021-03-21 15:03:14 · 170 阅读 · 0 评论 -
redis乐观锁
redis乐观锁1.事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,都会按照顺序执行!Redis的事务开启事务(multi)命令入队(所有命令…)执行事务(EXEC)2.乐观锁很乐观,认为什么时候都不会出问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据,MySql中添加version 字段进行比对!获取version更新的时候比较versio3.watch监听客户端A客户端B原创 2021-03-17 22:48:44 · 42 阅读 · 0 评论 -
redis+lua分布式锁(秒杀抢票场景)
redis分布式锁一、方案方案实现原理优点缺点redis命令1. 加锁:执行setnx,若成功再执行expire添加过期时间2. 解锁:执行delete命令实现简单,相比数据库和分布式系统的实现,该方案最轻,性能最好1.setnx和expire分2步执行,非原子操作;若setnx执行成功,但expire执行失败,就可能出现死锁2.delete命令存在误删除非当前线程持有的锁的可能3.不支持阻塞等待、不可重入redis Lua脚本能力1. 加锁:执行SET lock_原创 2021-03-16 17:20:06 · 501 阅读 · 0 评论