Redis
文章平均质量分 64
Redis学
峰子_狂人
我为JAVA狂
展开
-
Redis集群方式
单机、单节点、单实例1,单点故障2,容量有限3,压力为了解决上面的问题,才有了集群方案AKF拆分原则X 轴:直接水平复制扩展。(全量)Y 轴:将功能拆分出来扩展。Z 轴:基于用户逻辑扩展。主从模式(Master-Slave)1 全量同步Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:1)从服务器连接主服务器,发送SYNC命令;2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区原创 2021-05-22 15:11:02 · 87 阅读 · 0 评论 -
Redis击穿,穿透,雪崩
击穿指的是单个key在缓存中查不到,去数据库查询,注意: 这里指的是单个key发生高并发!!!1.使用DCL机制,synchronized+双重检查机制某个key只让一个线程查询,阻塞其它线程在,同步块中,继续判断检查,保证不存在,才去查DB。缺点: 会阻塞其它线程2.redis设置key永不过期这种方式可以说是最可靠的,最安全的但是占空间,内存消耗大3.使用SETNXSETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果:缺原创 2021-05-21 17:55:18 · 82 阅读 · 0 评论 -
Redis数据持久化
实现方式有两种:RDB(快照/副本)AOF(日志)RDB1.时点性数据有两种方式,阻塞(save)redis对外不提供服务(使用场景,明确知道服务停止使用,关机维护)非阻塞(bgsave)redis可以继续对外提供服务,然后将数据落地如果说8点需要bgsave,保存数据需要半个小时,那么RDB后的数据是保存的8点时内存的数据状态。而不是在保存中间数据发生变化后的,也进行保存。1.fork出来一个子进程,export的环境变量,子进程可以看到父进程的数据。子进程的修改不会破坏父进程,父进原创 2021-05-21 17:29:45 · 61 阅读 · 0 评论 -
redis布隆过滤器和布谷鸟过滤器
过滤器使用场景:比如有如下几个需求:1.原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中? 解决办法一:将10亿个号码存入数据库中,进行数据库查询,准确性有了,但是速度会比较慢。 解决办法二:将10亿号码放入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询,准确性和速度都有了,但是大约8gb的内存空间,挺浪费内存空间的。2.接触过爬虫的,应该有这么一个需求,需要爬虫的网站千千万万,对于一个新的网站url原创 2021-05-21 16:57:13 · 837 阅读 · 0 评论 -
redis sorted_set跳跃表(skiplist)
Sortedset底层存储结构两种数据结构支持 ziplist和 skiplist只有同时满足如下条件是,使用的是ziplist1.有序集合保存的元素数量小于128个2.有序集合保存的所有元素的长度小于64字节当ziplist作为存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表结点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值.跳跃表(skiplist)跳跃表是一种基于有序链表的扩展,简称跳表.跳表会维护多个索引链表和原链表.(不断得提升新的关键节点形成新的有序链表,通过空原创 2021-05-21 16:29:17 · 499 阅读 · 0 评论 -
Redis list 可以实现的数据结构
栈(stack)同向命令队列(queue)反向命令,1.先lpush,后rpop2.先rpush,后lpop阻塞,单播队列(FIFO)blpop A 60A列表有值的话,从左边移除一个数据,如果没有值的话,则等待A中插入数据为止,等待时间为60秒,如果时间设置为0表示阻塞时间无限延长brpop B 60A列表有值的话,从左边移除一个数据,如果没有值的话,则等待A中插入数据为止,等待时间为60秒,如果时间设置为0表示阻塞时间无限延长brpoplpush A B 60将A列表的尾元原创 2021-05-21 16:18:20 · 103 阅读 · 0 评论 -
Redis bitmap可以使用到的场景
日活统计应用场景中bitmap使用点赞(登录)去重应用场景中bitmap使用统计用户登录天数,统计周期随机(随便7天)活跃用户统计,随机天数统计,要去重命令bitmap主要就三个操作命令, setbit , getbit 以及 bitcountsetbit主要是指将某个索引,设置为1(设置0表示抹去标记),基本语法如下# 请注意这个index必须是数字,后面的value必须是0/1setbit key index 0/1getbit如果返回1,表示存在否则不存在getbit key原创 2021-05-21 16:07:20 · 342 阅读 · 0 评论 -
Redis数据结构
数据类型字符串(Strings)字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据你可以用Redis字符串做许多有趣的事,例如你可以:1.利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用。2.使用APPEND命令在字符串后添加内容。3.将字符串作为GETRANGE 和 SETRANGE的随机访问向量。4.在小空间里编码大量数据,或者使用 GETBIT 和 SETBIT创建一个Redis支持原创 2021-05-21 15:43:08 · 48 阅读 · 0 评论 -
Redis优点
Redis 是当前互联网世界最为流行的 NOSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持数据存入内存中,只要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库转载 2021-05-21 15:09:44 · 136 阅读 · 0 评论 -
磁盘和内存优劣
内存和磁盘的区别存储方式内存利用电流来实现存储磁盘利用磁效应来实现存储的存储容量内存是高速高价,而磁盘则是低速廉价程序,内存和磁盘的交互关系存储在磁盘中的程序需要读入到内存后才能运行分页式虚拟内存定义:在不考虑程序构造的情况下,把运行的程序按照一定大小的页(page)进行分割,并以页为单位在内存和磁盘间进行置换实现方式:1、在磁盘上提供了虚拟内存用的文件(page file,页文件)。该文件由 os自动做成和管理。文件的大小也就是虚拟内存的大小,通常是实际内存的相同程度至两倍程度2原创 2021-05-21 15:02:50 · 288 阅读 · 0 评论