
redis
文章平均质量分 60
pmdream
每天进步一点点,如果没有学习那就是倒退
展开
-
[redis]redis的热key问题
前言今天被问到,redi的热key问题,怎么解决?挺经典的,但是回答的也不好,做一个记录。因为和面试官探讨了一下,看看他想要的答案是什么,来进行补错。问题瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存服务回答我的想法当时是:1. 提前缓存热key2.多增点机器,然后把热key每台都放一下(我甚至想到cdn 不要干啥都想到cdn,跟这个场景也没那么相关,多加思考)面试官想听到的是:1.利用本地缓存2.业务进行分散热key,比如加个原创 2021-09-01 23:30:26 · 325 阅读 · 0 评论 -
[redis]持久化
前言redis的持久化可能要配合mysql的redolog 一起看理解,还有binlog。都差不多的玩意~回头补一下es的实现~做事情要学会类比,学习工具里面的思想,看看能不能用到业务中去~做一个高逼格的人 嘿嘿...原创 2021-08-29 01:21:44 · 240 阅读 · 0 评论 -
[redis]lru的实现和lru的模拟代码
前言redis的lru是近似lru算法,其实就是每个key里面都有存,最后一次访问这个key的时间戳24位1.因为lru需要很多内存,额外的内存,所以用近似lru2.那么我们就可以用随机采样法淘汰元素,而且处理方式是懒惰删除。3.一旦发现内存超过阈值,maxmermory,那么就随机采样出五个key,淘汰最久的key,如果淘汰后还是超过,那么久继续淘汰直到内存低于maxmemory;这个5可设置~具体的lru实现代码package com.dk.learndemo.al原创 2021-08-29 01:16:45 · 292 阅读 · 1 评论 -
[redis]redis的安全
前言关于redis的安全,面试可能不会问。但是lua脚本一般还是尽量不要用的~那么怎么尽量保证redis安全呢?危险的指令1. redis keys尽量不要用;2. flushdb 和 flushall 会让redis的所有数据全部清空;3. redis 可以提供 rename-command 指令可以将某些危险的指令,修改成特别的名称;用来避免认为的误操作;比如 rename-command flushall ""端口安全redis 默认端口 ,如果当前原创 2021-08-29 00:06:21 · 292 阅读 · 0 评论 -
[redis]知识合集
前言问了问同事面经,大厂也是,也都会问jvm 和 redis mysql什么的~不管是业务岗还是大数据平台岗位redis整体还是很常见的问题,死磕也都还好~常见问题1.redis用的单机集群?分布式锁怎么实现?redis挂了怎办?集群,一般副本有三个吧,运维平台能看到,分布式锁用redission实现分布式锁;redis挂了用redlock的方式,选举的方式来进行补救~集群一般都是插槽形式,在外界看来就是单个redis2.redis 删除机制https://blog.cs原创 2021-08-28 23:16:24 · 112 阅读 · 0 评论 -
[redis]使用规范
前言个人整理~主要是参考《redis深度历险》-钱文品里面提到好多有用的点~感谢大佬的书禁止事项:严格禁止超大Key(Value值超过10KB) 禁止大量key设置同一时间失效,否则可能会同时过期,影响到redis线上服务卡顿(因为同时过期还会让redis 定时扫描策略,会循环多次扫描过期字典,直到过期的key变得稀疏,会导致线上读写操作出现明显的卡顿) 禁止戒指用del删除大对象,因为删除大对象,比如一个上千万的hash,那么就会造成卡顿,应该使用unlink,后台异步回收线程(建原创 2021-08-28 23:09:02 · 166 阅读 · 0 评论 -
[Redis]怎么查看以xx开头的所有key?有什么坑?BigKey问题?
有坑!刚刚听同事说!因为服务器现在用的都是keys比如之前我们用的清理token方法:Set<String> keys = redisService.keys(RedisConstants.TOKEN + "*"); redisService.del(keys);但是,这个方法是停止别的插入为代价的,扫描之后得到key的集合。而且一次性获取所有key,key特别多的话就会很慢。keys是遍历算法,时间复杂度是O(n)这个命令非常容易导致Redis.原创 2020-07-17 17:39:51 · 5734 阅读 · 0 评论 -
[Redis]删除机制
1.redis三种不同的删除策略redis数据库键的过期时间都保存在过期字典中,根据系统时间和存活时间判断是否过期。 1,定时删除:实现方式,创建定时器 2,惰性删除:每次获取键时,检查是否过期 3,定期删除:每隔一段时间,对数据库进行一次检查,删除过期键,由算法决定删除多少过期键和检查多少数据库2. 优缺点 1,定时删除,对内存友好,但是对cpu很不友好(因为单线程) 2,惰性删除,对cpu友好,对内存很不友好(容易积压) 3,定期删除,是两种折中,但是,如果删转载 2020-07-17 15:10:38 · 4504 阅读 · 0 评论 -
[Redis]浅析Redis 分布式锁解决方案
(主要是续约Redisson)1.锁的设计?注意互斥性与临界区。超时释放,避免死锁。可重入性。一个线程在持有锁的情况可以对其再次请求加锁,防止锁在线程执行完临界区操作之前释放。2. Redis为什么可以做分布式锁?利用 Redis 的 SETNX 命令,此命令同样是原子性操作,只有在 key 不存在的情况下,才能 set 成功。而基于 Redis 多机实现的分布式锁Redlock,是Redis 的作者 antirez 为了规范 Redis 分布式锁的实现,提出的一个更安全有效的实现机转载 2020-07-14 16:15:00 · 306 阅读 · 0 评论 -
[Redis]关于redis的面试狂轰滥炸的几连问(未填答案)
1.redis常用来做什么场景?2.redis做分布式锁?怎么做,怎么防止redis锁过期了?主从结构如果主挂了,对于分布式锁有什么影响?3.redis的zset的底层实现?怎么实现的排序?4.redis的List的底层实现?5.redis读取存储的时候,cpu在做什么?6.redis读取一个key,一般是多少ms?7.多个主的结构,redis怎么选取哪一台?算法?...原创 2020-07-07 20:45:12 · 177 阅读 · 0 评论 -
[Redis]缓存雪崩,穿透和击穿?
1.缓存雪崩?(DB被大量的过期key查询查挂掉了)缓存过期时间设置的不好,而导致大批量的缓存过期,导致都要去查数据库,数据库的压力就会极大。解决办法:1.缓存过期时间再加上一个分钟的随机数 2.查询数据库的时候,要先拿到分布式锁。避免把数据库雪崩。(因为是集体失效,所以叫做雪崩) 高并发场景下应该减少使用,强制加锁的办法。(因为用户比如999人还要拿到数据库数据的) 3....原创 2020-06-16 17:44:22 · 151 阅读 · 0 评论 -
[Redis]必知必会
1.“二八定律”、什么是“热数据和冷数据”https://blog.youkuaiyun.com/pmdream/article/details/1067885812.缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级https://blog.youkuaiyun.com/xlgen157387/article/details/79530877?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159229712219724845063180%2522%252原创 2020-06-16 16:46:04 · 147 阅读 · 0 评论 -
[Redis]redis的二八定律,冷数据和热数据
目录1.二八定律2.redis的冷数据和热数据?2.1 方案一 配合SSDB2.2 redis的lru?2.3数据的冷热?2.4建议1.二八定律网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据的压力和提高网站的数据访问速度,则可以使用缓存机制来优化网站。2.redis的冷数据和热数据?redis是一种以内存为主的模式的高性能,内存是新的磁盘的哲学。2.1 方案一 配合SSDBssdb是什么?redis是内存..原创 2020-06-16 16:29:19 · 5443 阅读 · 1 评论 -
[Redis]如何用Redis实现分布式锁—— 集群版
单机版实现的局限性在上一篇文章中,我们讨论了Redis分布式锁的实现,简单回顾下。获取锁:set file:9527 ${random_value} NX EX ${timeout}释放锁,调用lua脚本:if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1])else return 0end这套实现机制,在只有一个Redis实例的情况下,确实很完美。.转载 2020-05-27 19:37:31 · 1288 阅读 · 0 评论 -
[Redis]redis如果删除掉不是自己的锁怎么办?(单机)
前言:这个说法并不是说,把别人的锁给删了。是因为都对一个记录比如扣库存。而恰好自己的过期时间过期,释放锁的时候把新的线程的锁给删除了。那么,怎么取解决呢?TIPS:锁的释放应该放在try catch中的finally中。1. 为了避免删除别人的锁为避免上边的情况,一般我们在每个线程加锁时要带上自己独有的value值来标识,只释放指定value的key,否则就会出现释放锁混乱的场景。但是呢,判断和删除是不是分成两步骤了呢?我在java中先判断了是否是此线程持有的锁,然后再进原创 2020-05-26 19:05:45 · 974 阅读 · 0 评论 -
[Redis]缓存数据redis满了怎么办?
redis缓存写满了怎么办?缓存数据满了怎么办?首先要明确, 用作缓存的数据都是设置了过期时间的, 没有过期时间那不叫缓存, 那叫持久化. 我们的业务量并没有那么大如果遇到缓存满了又该怎么办呢?加内存这是最简单粗暴的办法, 不过成本相对较高内存淘汰策略redis的内存淘汰策略是指在Redis的用于缓存的内存不足时, 怎么处理需要新写入且需要申请额外空间的数据.maxmemor...转载 2020-04-13 17:21:58 · 852 阅读 · 0 评论 -
[Redis]基础数据结构(二)list 列表
目录前言:1. 简单概括list1.1 队列1.2 栈1.3 快速链表(底层存储)2. 源码解读2.1 压缩列表的结构2.2 intset小整数集合2.3 quicklist前言:继续上一篇:[redis]基础数据结构(一)Stringhttps://blog.youkuaiyun.com/pmdream/article/details/104871358...原创 2020-03-15 20:14:07 · 125 阅读 · 0 评论 -
[Redis]基础数据结构(一)String
前言:最近在准备面试,把一年前看的redis深度历险和当时看的源码,重新拾到一下。快速过一遍,顺便整理以便后续的成长所需。以下内容整理自《redis深度历险》1. 字符串内部结构动态字符串,类似于ArrayList。用途:常常用来存放一些json,如果存放数字可以用于自增(我们业务中的有需要递增的房间号就是用的redis~)分配空间:也类似于ArrayList,实际空间...原创 2020-03-15 00:26:02 · 283 阅读 · 0 评论 -
[Redis]redis为什么这么快?
1. Redis为什么这么快?1)纯内存操作2)单线程,无锁竞争损耗(但是redis即将迎来多线程版本?!!)3)C语言实现,更接近底层操作4)多路I/O复用模型,非阻塞IO5)数据结构简单,底层又做了优化6)源码精湛、简短1.1 多路I/O与非阻塞I/O?通常的IO操作都是阻塞I/O,也就是调用read的时候,如果数据没有收到,那么线程或者进程会挂起,直到收到数据...原创 2020-02-24 16:08:05 · 189 阅读 · 0 评论