redis
文章平均质量分 87
散_步
但行好事,莫问前程
展开
-
Redis亿级数据存储方案哈希槽分区
1~2亿条数据需要缓存,请问如何设计这个存储案例?单机单台100%不可能,肯定是分布式存储,用redis如何落地?一般业界有3种解决方案:第一种:哈希取余分区:2亿条记录就是2亿个k,v,我们单机不行必须要分布式多机,假设有3台机器构成一个集群,用户每次读写操作都是根据公式:hash(key) % N个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。优点:简单粗暴,直接有效,只需要预估好数据规划好节点,例如3台、8台、10台,就能保证一段时间的数据支撑。使用Hash算法让固定的一部分原创 2022-04-09 15:54:24 · 1134 阅读 · 3 评论 -
redis数据类型及底层实现(三)
总结:redis数据类型以及数据结构的关系:不同数据类型对应的底层数据结构:1. 字符串int:8个字节的长整型。embstr:小于等于44个字节的字符串。raw:大于44个字节的字符串。Redis会根据当前值的类型和长度决定使用哪种内部编码实现。2. 哈希ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries 配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64 字节)时,Redis会使用zipl原创 2021-05-30 18:26:23 · 171 阅读 · 1 评论 -
redis数据类型及底层实现(二)
Hash数据结构介绍:案例:hash-max-ziplist-entries:使用压缩列表保存时哈希集合中的最大元素个数。hash-max-ziplist-value:使用压缩列表保存时哈希集合中单个元素的最大长度。Hash类型键的字段个数 小于 hash-max-ziplist-entries 并且每个字段名和字段值的长度 小于 hash-max-ziplist-value 时,Redis才会使用 OBJ_ENCODING_ZIPLIST来存储该键,前述条件任意一个不满足则会转换为 OBJ_EN原创 2021-05-30 18:24:07 · 250 阅读 · 0 评论 -
redis数据类型及底层实现(一)
Redis源代码的核心部分:src源码包下面该如何看?Redis基本的数据结构(骨架):1.简单动态字符串sds.c2.整数集合intset.c3.压缩列表ziplist.c4.快速链表quicklist.c5.字典dict.c6.Streams的底层实现结构listpack.c和rax.cRedis数据类型的底层实现:Github官网说明:https://github.com/redis/redisRedis对象object.c字符串t_string.c列表t_list.c字原创 2021-05-30 18:03:09 · 256 阅读 · 0 评论 -
Redis的缓存过期淘汰策略
Redis的缓存过期淘汰策略Redis内存满了怎么办?redis默认内存多少?在哪里查看?如何设置修改?查看Redis最大占用内存打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。redis默认内存多少可以用?一般生产上你如何配置?一般推荐Redis设置内存为最大物理内存的四分之三如何修改redis内存设置:通过修改文件配置:通过命令修改:什么命令查看redis内存使用情况?info memory真要打满了会怎么样?如果原创 2021-05-28 22:24:34 · 159 阅读 · 0 评论 -
Redis分布式锁
使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击)Redis分布式锁比较正确的姿势是采用redisson这个客户端工具RedLock理念:http://redis.cn/topics/distlock.htmlredisson实现:Redisson是java的redis客户端之一,提供了一些api方便操作redisredisson之官网:https://redisson.org/redisson之Github:https://github.co原创 2021-05-26 23:00:34 · 284 阅读 · 0 评论 -
缓存击穿
缓存击穿:大量的请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求打到数据库上面去。简单说就是热点Key突然失效了,暴打mysql危害:会造成某一时刻数据库请求量过大,压力剧增解决:方案1: 缓存击穿------热点Key失效-------互斥更新、随机退避、差异失效时间方案2: 对于访问频繁的热点key,干脆就不设置过期时间方案3:互斥锁独占防止击穿 多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。其他的线程走到原创 2021-05-23 14:35:25 · 574 阅读 · 3 评论 -
缓存雪崩和缓存穿透
缓存雪崩发生:redis主机挂了,Redis 全盘崩溃比如缓存中有大量数据同时过期解决:redis缓存集群实现高可用,主从+哨兵Redis Clusterehcache本地缓存 + Hystrix或者阿里sentinel限流&降级开启Redis持久化机制aof/rdb,尽快恢复缓存集群缓存穿透:请求去查询一条记录,先redis后mysql发现都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增,这种现象我们称为缓存穿透,这个redis变成了一个摆设。。原创 2021-05-22 17:13:42 · 152 阅读 · 0 评论 -
布隆过滤器BloomFilter
布隆过滤器BloomFilter:是什么?由一个初值都为零的bit数组和多个哈希函数构成,用来快速判断某个数据是否存在本质就是判断具体数据存不存在一个大的集合中布隆过滤器是一种类似set的数据结构,只是统计的结果不太准确特点:1.高效的插入和查询,占用空间少,返回的结果是不确定的。2.一个元素如果判断结果为存在的时候元素不一定存在但是判断结果为不存在的时候则一定不存在3.布隆过滤器可以添加元素,但是不能删除元素 因为删除元素会导致误判率增加4. 误判只会发生在过滤器没有添加过的元素,对原创 2021-05-22 16:58:12 · 259 阅读 · 0 评论 -
Redis的GEO
GEO简介:移动互联网时代LBS应用越来越多,交友软件中附近的小姐姐、外卖软件中附近的美食店铺、打车软件附近的车辆等等,那这种附近各种形形色色的XXX地址位置选择是如何实现的?地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名曲他在地球的位置。例如滴滴打车,最直观的操作就是实时记录更新各个车的位置,然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆使用如下SQL即可:sele原创 2021-05-19 23:28:39 · 224 阅读 · 0 评论 -
Redis的hyperloglog
互联网名词:什么是UV?Unique Visitor,独立访客,一般理解为客户端IP,需要去重考虑什么是PV?Page View,页面浏览量,不用去重什么是DAU?Daily Active User 日活跃用户量登录或者使用了某个产品的用户数(去重复登录的用户)常用于反映网站、互联网应用或者网络游戏的运营情况什么是MAU?MonthIy Active User 月活跃用户量看需求:统计某个网站的UV、统计某个文章的UV用户搜索网站关键词的数量统计用户每天搜索不同词条原创 2021-05-19 23:04:09 · 318 阅读 · 2 评论 -
Redis新类型bitmap
常见的四种统计聚合统计:统计多个集合元素的聚合结果,就是交差并等集合统计交并差集和聚合函数的应用排序统计:抖音视频最新评论留言的场景,请你设计一个展现列表。考察你的数据结构和设计思路?设计案例和回答思路:以抖音vcr最新的留言评价为案例,所有评论需要两个功能,按照时间排序+分页显示能够排序+分页显示的redis数据结构是什么合适?answer:list:每个商品评价对应一个list集合,这个List包含了对这个商品的所有评论,而且会按照评论时间保存这些评论,每一个新评论就用LPU原创 2021-05-16 22:18:16 · 347 阅读 · 1 评论 -
Redis入门篇
redis官网查阅和基本配置:https://redis.io/http://redis.cn/https://redis.io/download官网命令大全网址http://www.redis.cn/commands.htmlhttp://doc.redisfans.com/安全Bug按照官网提示,升级成为6.0.8查看自己redis版本的命令redis配置文件初始redis.conf配置文件2.1 修改daemonize 改为 daemonize yes2.2 修改pro原创 2021-05-12 23:14:43 · 233 阅读 · 1 评论 -
redis缓存过期淘汰策略
redis默认内存多少?在哪里查看? 如何设置修改?查看Redis最大占用内存:redis默认内存多少可以用?一般生产上你如何配置?一般推荐Redis设置内存为最大物理内存的四分之三,也就是0.75如何修改redis内存设置:通过修改文件配置;通过命令修改:什么命令查看redis内存使用情况?info memory真要打满了会怎么样? 如果Redis内存使用超出了设置的最大值会怎样?改改配置,故意把最大值设为1个byte试试设置了maxmemory的选项,假如redis内存原创 2021-04-14 22:08:31 · 209 阅读 · 0 评论 -
Redis基本数据类型及分布式锁的使用
redis 官网命令查看 http://www.redis.cn/commands.html八大类型:1.String(字符类型)最常用:set key valueget key同时设置/获取多个键值:MSET key value [key value …]MGET key [key …]数值增减:递增数字: INCR key增加指定的整数: INCRBY key increment递减数值: DECR key减少指定的整数: DECRBY key decrement获取字符原创 2021-04-14 21:35:56 · 601 阅读 · 0 评论 -
redis当中的Sentinel 架构
Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。例如:在Server1 掉线后:升级Server2 为新的主服务器:第一步:三台机器修改哨兵配置文件三台机器执行以下命令修改redis的哨兵配置文件cd /export/servers/redis-3.原创 2020-10-22 17:08:49 · 133 阅读 · 0 评论 -
Redis的主从复制架构
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示。使用主从复制这种模式,实现node01作为主节点,node02与node03作为从节点,并且将node01所有的数据全部都同步到node02与node03服务器第一步:node02与node03服务器安装redisnode02与node03执原创 2020-10-22 16:31:00 · 53 阅读 · 0 评论 -
Redis的语法以及数据恢复
redis当中一共支持五种数据类型,分别是string字符串类型,list列表类型,集合set类型,hash表类型以及有序集合zset类型,通过这五种不同的数据类型,我们可以实现各种不同的功能,也可以应用与各种不同的场景,接下来我们来看看五种数据类型的操作语法redis当中各种数据类型结构如上图:、redis当中对字符串string的操作下表列出了常用的 redis 字符串命令 SET key value设置指定 key 的值 示例:SET hello world...原创 2020-10-22 16:07:11 · 282 阅读 · 0 评论 -
Redis的安装以及使用
redis官网地址:https://redis.io/中文网站http://www.redis.cn/Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据.原创 2020-10-22 15:22:54 · 83 阅读 · 0 评论