Redis
文章平均质量分 56
Redis
weixin_46248981
这个作者很懒,什么都没留下…
展开
-
Redis热点key的解决方案
1.什么是热点Key就是短时间会有几十万甚至更多去访问Redis上的某个特定的key,那么,这样会造成流量过于集中。2.怎么发现热点Key1.根据业务确定比如锁秒杀,商品就是热点key2.客户端收集在操作redis之前,加入代码进行数据统计3.在Proxy层收集Proxy层就行收集,但是不是所有Redis集群都有proxy4.用redis自带命令收集4.1monitor4.2hotkeys参数在redis 4.0.3之后提供了redis-cli的热点key发现功能3.怎么解决1.转载 2021-09-22 22:59:54 · 1603 阅读 · 0 评论 -
Redis和MySQL数据如何保存一致性
https://blog.csdn.net/weixin_45127309/article/details/104253328?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogC转载 2021-08-23 12:01:04 · 123 阅读 · 0 评论 -
如何实现Redis和MySQL数据一致性
https://blog.csdn.net/weixin_45127309/article/details/104253328原创 2021-08-20 22:46:10 · 105 阅读 · 0 评论 -
Redis实现唯一ID、分布式锁
1.如何实现分布式ID因为Redis 是单线程的,所以没有线程安全问题。1.选取适当的id规则,比如年月日+序列2.利用Redis的String类型,incr my_seque3.如果需要月内或者年内递增,就可以设置Redis的过期时间。2.分布式锁https://juejin.cn/post/6844904126288150542...原创 2021-08-19 22:01:42 · 431 阅读 · 0 评论 -
分布式缓存常见的技术选型方案有哪些
分布式缓存的话,使用的比较多的是Memcached和Redis。不过现在基本没有用Memcached来做缓存,都是直接用Redis。Memcached是分布式缓存最开始兴起的那会,比较常用的。后来,随着Redis的发展,大家慢慢转而使用更加强大的Redis了。Redis和Memcached的区别和共同点共同点:都是基于内存的数据库,一般都用来当做缓存使用。都有过期策略两者的性能非常高区别:Redis支持更丰富的数据类型(支持更复杂的应用场景)。Redis不仅仅支持简单的k/v类型的数原创 2021-08-01 20:29:27 · 382 阅读 · 0 评论 -
切片集群:数据增多了,是该加内存还是加实例
1.什么是切片集群呢?切片集群,也叫分片集群,就是指启动多个Redis实例组成一个集群,然后按照一定的规则,把收到的数据划分成多份,每一份用一个实例来保存。2.保存更多数据的方案?纵向扩展:升级单个Redis实例的资源配置,包括增加内存容量、增加磁盘容量、使用更高配置的CPU。横向扩展:横向增加Redis实例的个数纵向扩展:好处是实施简单、直接。两个问题:当使用RDB对数据进行持久化时,如果数据量增加,需要的内存也会增加,主线程fork子进程时就可能会阻塞。不过如果你不要求持久化保存原创 2021-06-04 16:59:05 · 121 阅读 · 0 评论 -
哨兵集群:哨兵挂了,主从库还能切换吗
Redis有多个哨兵形成集群,如果一个哨兵实例故障了,那么其他哨兵还能继续协作完成主从库切换到工作。1.哨兵集群间是如何通信的呢Redis的哨兵实例相互之间的通信是基于pub/sub机制,也就是发布/订阅机制。哨兵只要和主库建立起连接,就可以在主库上发布消息了,比如它发布自己的连接信息(IP和端口)。同时,他也可以从主库上订阅消息,获得其他哨兵发布的连接信息。当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的IP地址和端口。除了哨兵实例,我们自己编写的应用程序也可以通过Redis原创 2021-06-04 16:13:54 · 162 阅读 · 1 评论 -
哨兵机制:主库挂了,如何不间断服务
1.在主从复制情况下,如何对主库进行监控在Redis主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。1.监控:监控主库是否真的挂了2.选主(选择主库):该选择哪个从库作为主库3.通知:怎么把新主库的相关信息通知给从库和客户端呢监控:监控是指哨兵进程在运行时,周期性地给所有主从库发送PING命令,检测它们是否仍然在线运行。如果从库没有在规定时间相应哨兵的PING命令,哨兵就会把它标记为下线状态。同样,如果主库也没有在规定时间内响应哨兵的P原创 2021-06-04 15:33:56 · 118 阅读 · 0 评论 -
Redis如何实现主从复制
1.Redis的高可靠性Redis的高可靠性:数据尽量少丢失。AOF和RDB可以分别通过回放日志和重新读入RDB文件的方式恢复数据。服务尽量少中断。增加Redis的实例副本。将一份数据同时保存在多个实例上,即使有一个实例出现了故障,需要过一段时间恢复,其他实例也能对外提供服务,不会影响业务使用。2.Redis如何实现多实例之间的数据一致Redis提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。读操作:主库、从库都可以接收。写操作:首先到主库执行,然后,主库将写操作原创 2021-06-03 11:49:01 · 161 阅读 · 0 评论 -
布隆过滤器
https://github.com/Snailclimb/JavaGuide/blob/master/docs/dataStructures-algorithms/data-structure/bloom-filter.md1.什么是布隆过滤器一个名叫布隆的人提出了一种来检索元素是否在给定集合中的数据结构,这种数据结构是高校且性能很好的,但缺点是具有一定的错误识别率和删除难度。并且,理论情况下,添加到集合中的元素越多,误报的可能性越大。2.布隆过滤器的原理介绍当一个元素加入布隆过滤器中的时候,会原创 2021-06-02 20:45:49 · 59 阅读 · 0 评论 -
如何保证缓存和数据库的一致性???
Cache Aside Pattern(旁路缓存模式):遇到写请求时,更新DB,如何直接删除cache。如果更新数据库成功,但是删除缓存这一步失败的话:1.缓存失效时间变短(不推荐):我们让缓存数据的过期时间变短,这样的话缓存就会从数据库中加载数据。2.增加cache更新重试机制(常用):如果cache服务当前不可用导致删除失败的话,我们就隔一段时间进行重试,重试次数可以自己定,如果多次重试还是失败的话,我们可以把当前更新失败的key存入队列中,等缓存服务可用之后,再把缓存对应的key删除即可。.原创 2021-06-02 20:12:43 · 115 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩
1.缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没有取到,那直接返回空结果。2.缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起id为-1的数据或者id为特别大不存在的数据。这时候的用户可能是攻击者,攻击会导致数据库压力过大,导致大量请求落在数据库上。解决方案:1.接口层增加校验,如id做基础校验,id<=0的直接拦截。2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将ke原创 2021-06-02 20:08:45 · 77 阅读 · 0 评论 -
Redis事务
Redis可以MULTI、EXEC、DISCARD和WATCH等命令来实现事务功能。>MUTIOK>INCR fooQUEUED>INCR barQUEUED>EXEC1)(integer)12)(integer)1使用MULTI命令后可以输入多个命令,Redis不会立即执行命令,而是将他们放到队列中,当调用了EXEC命令将执行所有命令。但是Redis数据库不支持roll back,因而不满足原子性(而且不满足持久性)因为开发者们觉得没有毕业支持回滚,这样更原创 2021-06-02 18:22:56 · 52 阅读 · 0 评论 -
Redis持久化机制RDB+AOF(数据恢复)
Redis有两种持久化化操作:RDB快照AOF追加文件快照(snapshotting)持久化(RDB)Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis的主从结构,主要用来提高Redis性能),还可以将快照留在原地以便重启服务器的时候使用。快照持久化是Redis默认的持久化方式,在Redis.conf配置文件中默认有此下配置save 900 1 #在9原创 2021-06-02 18:09:22 · 249 阅读 · 0 评论 -
Redis过期策略,淘汰机制
1. Redis 给缓存数据设置过期时间有啥用?内存是有限的,如果缓存中的所有数据都是一直保存的话,容易Out Of Memory。Redis自带了给缓存数据设置过期时间的功能:192.168.1.1>exp key 60 #数据在60s后过期(integer)1192.168.1.1>setex key 60 value #数据在60s后过期(setex:set+expire)OK192.168.1.1>ttl key #查看数据还有多久过期(integer)56注意原创 2021-06-02 17:03:20 · 105 阅读 · 1 评论 -
Redis单线程模型详解
Redis是单线程,主要指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程。Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。单线程Redis为什么可以那么快Redis的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。Redis采用了多路复用机制,使其在网络IO操作中能并发处理大量客户端请求,实现高吞吐率。基于多路复用的高性能I/O模型在Redis只原创 2021-06-02 16:29:21 · 348 阅读 · 0 评论 -
Redis 常见的数据结构和场景分析
1.简单动态字符串(SDS)简单动态字符串(simple dynamic string):保存文本数据和二进制数据获取字符串长度复杂度为O(1)不会造成缓冲区溢出常用命令:set、get、strlen、exists、dect、incr、setex应用场景:一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量。普通字符串的基本操作192.168.1.1>set key vale #设置key-value类型的值OK192.168.1.1>get key原创 2021-06-02 15:44:51 · 106 阅读 · 1 评论 -
简单介绍一下Redis
1.简单介绍一下RedisRedis是基于C语言开发的非关系型数据库。Redis的数据是存放在内存中的,所以读写速度非常快。Redid常见的应用场景有:缓存。2.缓存数据的处理流程是怎样的?流程:1.如果用户请求的数据哎缓存中就直接返回2.缓存中不存在的话就看数据库中是否存在3.数据库中存在的话就更新缓存中的数据4.数据库中不存在的话就返回空数据3.为什么采用Redis作为缓存高性能:如果用户第一次访问数据库中的某些数据的话,这个过程是比较慢的,毕竟是从硬盘中读取的,但是,如果说原创 2021-06-02 14:33:42 · 387 阅读 · 0 评论