• 想不到!面试官问我:Redis内存满了怎么办?
    那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?上面说到了Redis可使用最大内存使用完了,是可以使用LRU算法进行内存淘汰的,那么什么是LRU算法呢?LRU,即最近最少使用,是一种缓存置换算法。当缓存被占满,这个时候继续往缓存里面添加数据,就需要淘汰一部分老的数据,释放内存空间用来存储新的数据。= null) { moveNodeToHead; } return node; } private void removeNode() { Node node = tail.pre; //从链表里面移除 removeFromList; nodeMap.remove; count--; } private void removeFromList { Node pre = node.pre; Node next = node.next; pre.next = next; next.pre = pre; node.next =
  • 横扫阿里、滴滴、美团后,3年经验的Java后端妹子整理出这份厚厚的面经!
    先说下这次面试的结果吧:到 hr 面的:阿里、美团、滴滴、金山云、每日一淘、火币、宜信、旺店通、黄包车、linkedMe其他:小米京东(电话面试一轮+现场两轮,面试完快中午一点了,说是让我先回家,后面让hr 电话联系我一周后一面的面试官问我还考虑京东不,如果考虑的话,就进行后续。后面面阿里的时候我就自己打脸了,面试官“base杭州考虑吗”,我“面过阿里我就去杭州,面不过我就在北京”。爱,就要大胆的说出来。美团电话面试+现场三轮技术面试+hrbp面试数据库和缓存的一致性问题。
  • 数据库缓存最终一致性的四种方案
    而缓存一致性的保证,更是在面试中被反复问到,这里进行一下总结,针对不同的要求,选择恰到好处的一致性方案。我们本次的讨论,主要针对数据库缓存场景,将以redis作为mysql的缓存为案例来进行。存在问题存储的数据随着时间可能会发生变化,而缓存中的数据就会不一致。通常考虑的,都是最终一致性。解决方案方案一通过key的过期时间,mysql更新时,redis不更新。
  • 神一样的CAP理论被应用在何方?
    “ 对于开发或设计分布式系统的架构师工程师来说,CAP 是必须要掌握的理论。图片来自 PexelsBut:这个文章的重点并不是讨论 CAP 理论和细节,重点是说说 CAP 在微服务中的开发怎么起到一个指引作用,会通过几个微服务开发的例子说明,尽量的去贴近开发。CAP 定理又被称为布鲁尔定理,是加州大学计算机科学家埃里克·布鲁尔提出来的猜想,后来被证明成为分布式计算领域公认的定理。不过布鲁尔在出来 CAP 的时候并没有对 CAP 三者(Consistency,Availability,Partition to
  • 搜索引擎的预料库 —— 万恶的爬虫
    本节我们来生产一个简单的语料库 —— 从果壳网爬点文章。我查阅了站点的最新文章,发现这个 id 还没有超过 45w,所以我打算从 1 开始遍历,扫描出所有的有效文章。有同学建议我使用 Go 语言来爬,开启协程比线程方便多了。这个还是留给读者当作学习 Go 语言的练习题吧,我是打算一杆子 Java 写到底了 —— 因为玩 Lucene 是离不开 Java 的。当文章不存在时,果壳网并不是返回标准的 404 错误码。同时因为这 45w 个整数 id 有效的文章有可能连一半都占不到,所以我还会将无效的文章 id 也给记录下来,减少因为程序重启带来的无效爬虫抓取动作。
  • 领券中心项目,我是如何用 Redis 做实时订阅推送的?
    先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了………什么是领劵的订阅推送?推送的实效性的问题:当用户在领劵中心订阅了某个劵的领取提醒后,在后台就会生成一条用户的订阅提醒记录,里面记录了在哪个时间点给用户发送推送信息。MQ虽然支持消息的延迟投递但尺度太大1s 5s 10s 30s 1m,用来做精确时间点投递不行!这其中就要借助我们的强大的redis了。redis SortedSet队列天然支持以时间作为条件排序,完美满足我们选出要推送的记录。然后以MQ的形式把消息推送到消息中心,发MQ是异步的,算上其它处理0.5s。
  • 基于Docker搭建Redis一主两从三哨兵
    作者丨oscarwin编辑丨Java知音juejin.im/post/5d26b03de51d454fa33b1960这段时间正在学习Redis和容器相关的内容,因此想通过docker搭建一套redis主从系统来加深理解。看这篇文章可能你需要一定的docker基础,以及对redis主从和哨兵机制有所了解。docker CE是docker的社区版本。先从docker官方公共仓库拉取redis镜像,然后修改redis服务的配置文件,最后启动容器,启动redis服务器。在多台机器上运行redis服务器,并建立主从关系。对于master而言,配置文件修改以下几项#注释这一行,表示Redis可以接受任意
  • 基于Docker搭建Redis一主两从三哨兵
    看这篇文章可能你需要一定的docker基础,以及对redis主从和哨兵机制有所了解。首先分别在这三台主机上安装docker,然后每台主机上启动一个redis容器,运行redis-server服务,其中35.236.172.131作为master,另外两台机器作为slave,最后在三台主机上再分别启动一个redis容器,运行redis-sentinel。docker CE是docker的社区版本。先从docker官方公共仓库拉取redis镜像,然后修改redis服务的配置文件,最后启动容器,启动redis服务器。在多台机器上运行redis服务器,并建立主从关系。
  • 记录一次系统性能调优过程
    问题回顾在线上环境,由于业务场景需要,要求程序能够在普通的4G机器中依然正常运行。而原来的环境配置为8核16G,微服务部署,一共有6个功能模块。而现在要求在一台4核4G的设备上正常运行。问题清单模块合并过程中各种冲突,各种Bean无法正常加载事件处理性能原来每秒3000~1w左右,现在突然骤降至几百左右;事件存在丢失现象,而且丢失比较严重发现系统cache一直在不断的上涨,free -m 后发现可余内存几乎用没了问题排查1. 代码冲突包名冲突。不同模块的包名设计上有重复类名冲突。@Configuration @Bean @Controller @Service @Repository 等注解中没有指定Bean实例的名称。beanName + "-" : DEFAULT_THREAD_NAME_PREFIX) ; return new SimpleAsyncTaskExecutor;}...SimpleAsyncTaskExecutor.classprotected void doExecute { Thread thread = (this.threadFactory !
  • 关于 Redis 缓存的几道典型面试题!
    redis 作为缓存中间件的一个佼佼者,成为了面试必问项目。本文分享一下Redis几道常见的面试题:缓存雪崩1.1 什么是缓存雪崩?我们都知道Redis不可能把所有的数据都缓存起来,所以Redis需要对数据设置过期时间,并采用的是惰性删除 + 定期删除两种策略对过期键删除。如果缓存数据设置的过期时间是相同的,并且Redis恰好将这部分数据全部删光了。这就是缓存雪崩:Redis挂掉了,请求全部走数据库。扒一扒 JVM 的垃圾回收机制,拿大厂offer少不了它!想要去阿里面试?
  • 干货满满 | 来自灵魂的拷问-这21道Redis面试题
    幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。全页缓存 除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。发布/订阅 最后是Redis的发布/订阅功能。
  • 七问Redis,才知道我与技术大牛的差距在哪里
    “Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否再让我多问你的几个问题,让我更加深入的去了解你。Redis的通讯协议是什么Redis 的通讯协议是文本协议,是的,Redis 服务器与客户端通过 RESP(Redis Serialization Protocol)协议通信。没错,文本协议确实是会浪费流量,不过它的优点在于直观,非常的简单,解析性能极其的好,我们不需要一个特殊的 Redis 客户端仅靠 Telnet 或者是文本流就可以跟 R
  • 8种方案解决重复提交问题!
    简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。3)在session中存放一个特殊标志在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交,在服务器端,获取表单中隐藏字段的值,与session中的唯一标识符比较,相等说明是首次提交,就处理本次请求,然后将session中的唯一标识符移除;不相等说明是重复提交,就不再处理。
  • 余额并发扣减一致性,能否使用redis事务?
    文章非常多朋友留言问,能不能把余额放到reids里,利用redis的事务性来扣减余额。redis如何实现事务性?redis的WATCH为何能够保证事务性,本质上,它使用的就是乐观锁CAS机制。大部分情况下,redis不同的客户端会访问不同的key,所以WATCH碰撞的概率会比较小,在秒杀的业务场景,即使使用WATCH,调用侧仍然需要重试。在CAS机制这一点上,redis和mysql相比没有额外的优势。redis的性能之所以高,还是redis内存访问与mysql数据落盘的差异导致的。
  • 再有人面试问你 Redis 分布式锁的实现,把这篇文章甩给他
    目录一、写在前面二、Redisson实现Redis分布式锁的底层原理加锁机制锁互斥机制watch dog自动延期机制可重入加锁机制锁释放机制此种方案Redis分布式锁的缺陷。如果该客户端面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器。很简单,第一个if判断会执行“exists myLock”,发现myLock这个锁key已经存在了。一般我们在生产系统中,可以用Redisson框架提供的这个类库来基于redis进行分布式锁的加锁与释放锁。上述Redis分布式锁的缺点其实上面那种方案最大的问题,就是如果你对某个redis master实例,写入了myLock这种锁key的value,此时会异步复制给对应的master slave实例。
  • 后端开发都应该掌握的Redis基础
    Redis的通用命令Redis官网将Redis的命令按照功能划分为15个主题分组,其中,Kyes主题的命令对所有的数据结构都通用,因此,有必要在了解其他数据结构命令前好好学习一下。keyskeys命令的作用是列出Redis所有的key,该命令的时间复杂度为O,N随着Redis中key的数量增加而增加,因此Redis有大量的key,keys命令会执行很长时间,而由于Redis是单线程,某个命令耗费过长时间,则会导致后面的的所有请求无法得到响应,因此,千万不要在生产服务器上使用keys命令。
  • antirez:Redis 6 将支持客户端缓存;Flask 应用集成测试案例谈;React v16.9 新特性
    点击链接或图片即可阅读喜欢请分享到朋友圈哦开发者头条[译] antirez:Redis 6 将支持客户端缓存新版本的 Redis 协议 推进得还很慢,如果没有一个好的理由,明智的人是不会更换工具的。更多「Redis」热门文章Flask 应用集成测试案例谈本文通过一个具体实例,介绍如何对典型的 Flask Web 应用进行集成测试,同时也会看到如何利用 Python 强大的数据分析功能,获取对于测试结果的深入理解,并以此为依据来指导性能优化工作。更多「Flask」热门文章[译] React v16.9 新特性React 16.9 包含了一些新特性、bug 修复以及新的弃用警告,以便与筹备接下来的主要版本。
  • 架构秘笈:移花接木。使用mysql模拟redis
    有些互联网公司,直接使用redis作为后端数据库。当业务量暴增,就面临一个redis容量和价格的权衡问题。改业务代码是来不及了,只好用一些持久化存储 ,来模拟redis的一些数据结构。redis支持近十种数据类型,最常用的有5种。string、hash、zset、set、list等。其实,我们所需要开发的,就是一个redis代理proxy。解析出来的命令,将会被模拟,然后根据配置的路由,定位到相应的mysql中。Redis是文本协议redis是文本协议,协议名称叫做RESP。拿netty来说,就有codec-redis 模块供我们使用。设计专用的数据库表rstore_hash,其中,rkey和hkey是联合主键。redis正是通过分数来为集合中的成员进行从小到大的排序。
  • 10分钟彻底理解 Redis 的持久化机制:RDB和AOF
    扫描下方二维码试读什么是Redis持久化?为了避免内存中数据丢失,Redis提供了对持久化的支持,我们可以选择不同的方式将数据从内存中保存到硬盘当中,使数据可以持久化保存。Redis提供了RDB和AOF两种不同的数据持久化方式,下面我们就来详细介绍一下这种不同的持久化方式吧。通过RDB进行数据备,由于使用子进程生成,所以对Redis服务器性能影响较小。AOF聊完了RDB,来聊聊Redis的另外一个持久化方式:AOF。
  • 面向前端工程师的Nodejs入门手册(三)
    前面两篇从前端入门的视角去学习认识了Nodejs,接下来将真正从实战角度来看看Nodejs能做什么,如何从零到一的去完成你的全栈项目。接下来进入新的知识点,Nodejs与缓存系统。Nodejs与缓存系统如果要从前端工程师进阶全栈,则必须要了解一下缓存系统,这里介绍的缓存系统以Redis作为示例,来看看Nodejs是如何操作Redis缓存系统的,再通过缓存系统的使用场景,来看看它能干什么。所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。看得出来使用最多的包就是redis包了,我们在本地进行安装。npm i --save redis接下来使用redis包暴露的createClient方法连接docker启动好的redis。