Redis

redis缓存淘汰策略

让人想犯罪 __ 提交于 2020-11-13 00:57:37
缓存淘汰策略 介绍 当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用。 在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存,Redis 提供了配置参数 maxmemory 来限制内存超出期望大小。 当实际内存超出 maxmemory 时,Redis 提供了几种可选策略 (maxmemory-policy) 来让用户自己决定该如何腾出新的空间以继续提供读写服务。 noeviction # 不会继续服务写请求 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。 volatile-lru # 尝试淘汰设置了过期时间的 key,最少使用的 key 优先被淘汰。没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。 volatile-ttl # 跟上面一样,除了淘汰的策略不是 LRU,而是 key 的剩余寿命 ttl 的值,ttl 越小越优先被淘汰。 volatile-random # 跟上面一样,不过淘汰的 key 是过期 key 集合中随机的 key。 # volatile策略只会针对带过期时间的 key

贼厉害,手撸的 SpringBoot 缓存系统,性能杠杠的!

断了今生、忘了曾经 提交于 2020-11-12 17:39:30
一、通用缓存接口 二、本地缓存 三、分布式缓存 四、缓存“及时”过期问题 五、二级缓存 缓存是最直接有效提升系统性能的手段之一。个人认为用好用对缓存是优秀程序员的必备基本素质。 本文结合实际开发经验,从简单概念原理和代码入手,一步一步搭建一个简单的二级缓存系统。 一、通用缓存接口 1、缓存基础算法 (1)、 FIFO (First In First Out),先进先出,和OS里的FIFO思路相同,如果一个数据最先进入缓存中,当缓存满的时候,应当把最先进入缓存的数据给移除掉。(2)、 LFU (Least Frequently Used),最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。(3)、 LRU (Least Recently Used),最近最少使用,如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据移除。 2、接口定义 简单定义缓存接口,大致可以抽象如下: package com.power.demo.cache.contract; import java.util.function.Function; /** * 缓存提供者接口 **/ public interface CacheProviderService { /** *

春招大厂Java岗面试必备:Java基础+算法+JVM+数据库+Redis+Spring全家桶

旧巷老猫 提交于 2020-11-12 13:59:18
前言 然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和基础。对源码解读和核心原理理解也是成了加分项,特别是对 Java 的一些核心基础知识点掌握的不够或者没有体系方向的朋友面试也成了一个苦恼的事情。 今天在这分享目前国内公司Java面试常问的问题包括JVM、常用的算法和数据结构,redis缓存,分布式,Spring,Kafka,Nginx,微服务等。正所谓知己知彼,只有体系知识巩固,面对不断更新的技术才能快速掌握,同时在面试、工作中也更能脱颖而出! 由于篇幅原因,本人只截取了资料部分截图,如需获取全部面试体系文档,获取方式如下: 点击获取 Java基础面试专题 JVM面试专题 spring面试专题 springmvc面试专题 springboot面试专题 多线程面试专题 MyBatis优化面试专题 Netty与RPC面试专题 由于篇幅限制,小编只截取了资料部分截图,如需获取全部面试体系文档,获取方式如下: 点击获取 Redis面试专题 Dubbo面试专题 RabbitMQ面试专题 ZooKeeper面试专题 数据库面试专题 Kafka面试专题 由于篇幅限制,以上只截取了资料部分截图,全部内容已整理为PDF文档,如需获取完整面试资源文档,请如下点击: 点击获取 ,

Java面试必备的12个技术点解析:Spring全家桶+微服务+Redis+Netty+Kafka等,你掌握了多少?

和自甴很熟 提交于 2020-11-12 11:47:45
跳槽一直是个敏感话题 ,但在如今几乎没有稳定工作的时代,跳槽对很多人来说是再平常不过的事了,而互联网人也是跳槽蛮频繁的一个群体,有人说, 程序员涨薪晋升全靠跳槽,这也不尽然,在一家好企业沉淀几年也许是更好的选择。 然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和基础。就连对应届生来说,面试也没有往年那么宽容了,总归来说,跳槽真的越来越难。 但是,对每一个程序员来说,心中 都有一座大厂梦,这个大厂梦需要坚持和努力,才能实现。所以,程序员如果想要面试拿到心仪的offer,补充好自己的知识库是很有必要的。 以下展示面试资料,有需要获取面试体系文档的朋友 Java 面试题基础篇 Spring 面试专题及答案 SpringBoot 面试专题及答案 SpringMVC 面试专题及答案 SpringCloud 面试专题及答案 微服务面试专题及答案 多线程面试专题及答案 开源框架面试专题及答案 Redis 面试专题及答案 Netty 相关面试专题及答案 ZooKeeper面试专题及答案 以上是部分的专题及答案截图,除了以上专题以外,还有部分专题的内容未展示,包括数据库、设计模式、并发编程、Tomcat、SQL、RabbitMQ、Nginx、MySQL、Linux、Dubbo等。

实现Redis Cluster并实现Python链接集群

假装没事ソ 提交于 2020-11-12 10:36:56
[TOC] 一、Redis Cluster简单介绍 Redis集群 搭建的方式有多种,例如Redis主从复制、Sentinel高可用集群等,但从 Redis 3.0 之后版本支持Redis-cluster集群, Redis-Cluster 采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。 其Redis-cluster结构图如下: Redis Cluster集群的运行机制: 所有的Redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 节点的Failover是通过集群中超过半数的节点检测失效时才生效。 客户端与Redis节点直连,不需要中间Proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可(默认slave从节点只提供备份)。 Redis-cluster把所有的物理节点映射到[0-16383]Slot上(不一定是平均分配),Cluster 负责维护node<->slot<->value。 Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个槽中。 二、背景 为了保证Redis集群的高可用性,即使使用Sentinel哨兵实现Failover自动切换,Redis每个实例也是全量存储

Redis 实现分布式锁

╄→尐↘猪︶ㄣ 提交于 2020-11-11 17:54:01
redis的常见部署方式: 1.单机 单点问题 2.mster-slave 读写分离,不能切换 3.哨兵 哨兵模式 通过哨兵监控节点,主节点宕机自动切换slave为master 4.cluster 基于槽点16348个槽点 多主多从,组合形成 Redis分布式锁要保证的几个方面: 1.互斥性 2.不能死锁 3.大多数节点正常,锁不能丢失。 分布式锁的实现方案: 1.可以直接通过 set key value px milliseconds nx 命令实现加锁, 通过Lua脚本实现解锁 存在的风险,锁所在的节点发生宕机,导致锁会丢失的。 2.Redission 实现 Redission在Redis的基础上实现Java驻内存数据网格。提供了一系列的分布式的Java常用对象,重入锁,读写锁,公平锁,红锁,还提供了很多的分布式服务。Redission提供了使用Redis的最简单和便捷的方式。 / 1.构造redisson实现分布式锁必要的Config Config config = new Config(); config.useSingleServer().setAddress( "redis://127.0.0.1:5379" ).setPassword( "123456" ).setDatabase( 0 ); // 2.构造RedissonClient RedissonClient

身为一个合格的Java架构师,应该了解并且常用的Java技术有哪些?

时光怂恿深爱的人放手 提交于 2020-11-11 10:19:46
目录 前言 来自小编的建议 JAVA 该学习的哪些技术? 初中级 Java 程序员必须掌握的知识 Java 程序员必备书单 基础 并发 JVM 推荐的视频教程 前言 我听说编程语言,经常使用的是其中20%的技术。在Java这门语言中,这20%包括哪些内容?参加培训两个月了,还有两个月的时间,要想在两个月后,找到一份Java初级程序员的工作,有哪些是必须掌握的,有哪些是可以现学现卖的?一个完整的Javaweb项目,有哪些具体模块,每个模块用到的技术是哪些? 来自小编的建议 建议不要管那个常不常用的这些问题!技术一直在不断更新,学习是永不止境的,每个技术阶段虽然都有对应的常用技术需要学习,但是单单学习几个单个的技术是远远不够的。如果你想找工作就要老老实实的学, 操作系统、计算机网络这些基础知识,工作之后基本都忘的差不多了。但是,我个人觉得也还是要学的。很多人都说数据结构和算法就像一个程序员的内功,前期可能你看不出来,等到后面你再和那些算法和数据结构厉害的人比可能就会相形见绌。所以,我觉得除了应付找工作之外。搞好基础知识。如果非要学那些常用,我个人觉得:Spring、Hibernate、Mybatis 等框架、Dubbo、Zookeeper、常见的消息队列(比如Kafka、RocketMq)的使用、缓存Redis、MySQL等等这些东西都应该是每个Java初中级程序员必备的技能了吧!

【redis】-- 缓存(redis作为缓存使用)

こ雲淡風輕ζ 提交于 2020-11-11 09:42:29
[toc] redis有两种使用方式一是作为数据库使用,二是作为缓存使用。 将redis作为缓存,当你新增数据时,让它自动地回收旧数据是件很方便的事情。这个行为在开发者社区非常有名,因为它是流行的memcached系统的默认行为。而redis回收数据LRU是redis唯一支持的回收算法。 1.Maxmemory配置指令 maxmemory配置指令用于配置Redis存储数据时指定限制的内存大小。通过redis.conf可以设置该指令,或者之后使用CONFIG SET命令来进行运行时配置。 例如为了配置内存限制为100mb,以下的指令可以放在redis.conf文件中。 maxmemory 100mb 设置maxmemory为0代表没有内存限制。对于64位的系统这是个默认值,对于32位的系统默认内存限制为3GB。 当指定的内存限制大小达到时,需要选择不同的行为,也就是策略。 Redis可以仅仅对命令返回错误,这将使得内存被使用得更多,或者回收一些旧的数据来使得添加数据时可以避免内存限制。 1.redis的回收策略 当maxmemory限制达到的时候Redis会使用的行为由 Redis的maxmemory-policy配置指令来进行配置。 以下的策略是可用的: noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)