memcached

【Redis】基础学习概览【汇总】

不羁的心 提交于 2020-05-01 06:13:46
一、概述 1.1 简介 1.2 Redis单线程好处 1.3 单线程弊端 1.4 Redis应用场景 1.5 Redis 和 Memecached 的区别 二、安装、开启以及关闭 三、Redis基本数据类型 四、SpringBoot整合Redis 五、Redis发布订阅 六、Redis主从复制 七、Redis哨兵机制 八、Redis事务 九、SpringBoot+Redis+Ehcache实现二级缓存 十、Redis持久化方式 十一、Redis集群方式 十二、Redis 缓存雪崩和缓存穿透 十三、用Redis解决分布式Session 一、概述 1.1 简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。 Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由 C语言 编写。官方提供的数据是可以达到100000+的qps, Redis是一个非关系型数据库(NoSQL) 内存数据库,以key value方式进行存储 Redis以单线方式存储,既然是单线程

搭建openstack (基础服务mysql rabbitmq keystone)

佐手、 提交于 2020-05-01 04:50:02
搭建openstack (基础服务mysql rabbitmq keystone) 简单安装mysql yum install -y mariadb-server systemctl enable mariadb.service systemctl restart mariadb.service systemctl status mariadb.service 配置root密码 mysql_secure_installation 先按回车,然后按Y,设置mysql密码,然后一直按y结束 这里我设置的密码是123 搭建rabbitmq 查看 rabbitmq ha搭建 安装配置Keystone 配置keystone数据库 新建数据库 CREATE DATABASE keystone; 配置该数据库的登录用户 配置本机登录 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123'; 配置出了本机之外的登录方式 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123'; 安装keystone和memcached 安装配置memecached 安装 yum -y install openstack

Redis缓存雪崩、缓存穿透、缓存击穿、缓存降级、缓存预热、缓存更新

房东的猫 提交于 2020-04-29 13:18:25
Redis缓存能够有效地加速应用的读写速度,就DB来说,Redis成绩已经很惊人了,且不说memcachedb和Tokyo Cabinet之流,就说原版的memcached,速度似乎也只能达到这个级别。今天主要讲讲在使用Redis时经常遇到的几个问题。缓存雪崩、缓存击穿、缓存穿透、缓存预热、缓存更新、缓存降级。 v 缓存雪崩 缓存雪崩,是指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 缓存雪崩示意图: 缓存失效时的雪崩效应对底层系统的冲击非常致命,那么应对Redis缓存雪崩有哪些方案呢? 1.1 加锁或者队列 可以考虑用加锁或者队列的方式防止大量线程对数据库的一次性进行读写,避免缓存失效时对数据库造成的巨大冲击。 以上效果还可以考虑接入Redis锁实现,具体可以参考 《SpringBoot进阶教程(二十七)整合Redis之分布式锁》 加锁或者队列都是一个非常浅显的办法。虽然能够在一定的程度上缓解了数据库的压力,但同时也极大的降低了系统的吞吐量。 1.2 协调Redis过期时间 分析用户行为,尽量让缓存失效的时间均匀分布,最次也得随机分布,尤其是一些访问大的接口 @Override public UserDetails getUserInfoById

【转】Memcached之缓存雪崩,缓存穿透,缓存预热,缓存算法

 ̄綄美尐妖づ 提交于 2020-04-29 12:09:41
缓存雪崩 缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。 解决思路: 1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。 2,分析用户行为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。 3,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。 缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库中查询。 解决思路: 1,如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。 2,根据缓存数据Key的规则。例如我们公司是做机顶盒的,缓存数据以Mac为Key,Mac是有规则,如果不符合规则就过滤掉,这样可以过滤一部分查询。在做缓存规划的时候,Key有一定规则的话,可以采取这种办法。这种办法只能缓解一部分的压力,过滤和系统无关的查询,但是无法根治。 3,采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉

面试官:你对Redis缓存了解吗?面对这11道面试题你是否有很多问号?

狂风中的少年 提交于 2020-04-29 09:01:05
前言 关于Redis的知识,总结了一个脑图分享给大家 1、在项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试官心理分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚,那确实比较尴尬。 只要问到缓存,上来第一个问题,肯定是先问问你项目哪里用了缓存?为啥要用?不用行不行?如果用了以后可能会有什么不良的后果? 这就是看看你对缓存这个东西背后有没有思考,如果你就是傻乎乎的瞎用,没法给面试官一个合理的解答,那面试官对你印象肯定不太好,觉得你平时思考太少,就知道干活儿。 面试题剖析 项目中缓存是如何使用的? 这个,需要结合自己项目的业务来。 为什么要用缓存? 用缓存,主要有两个用途:高性能、高并发。 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办? 缓存啊,折腾 600ms 查出来的结果,扔缓存里,一个 key 对应一个 value,下次再有人查,别走 mysql折腾 600ms 了,直接从缓存里,通过一个 key 查出来一个 value,2ms 搞定。性能提升 300 倍。 就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中

史上最全Redis面试题及答案

纵然是瞬间 提交于 2020-04-28 23:18:51
1、什么是Redis? 2、Redis相比memcached有哪些优势? 3、Redis支持哪几种数据类型? 4、Redis主要消耗什么物理资源? 5、Redis的全称是什么? 6、Redis有哪几种数据淘汰策略? 7、Redis官方为什么不提供Windows版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么Redis需要把所有数据放到内存中? 10、Redis集群方案应该怎么做?都有哪些方案? 11、Redis集群方案什么情况下会导致整个集群不可用? 12、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 13、Redis有哪些适合的场景? 14、Redis支持的Java客户端都有哪些?官方推荐用哪个? 15、Redis和Redisson有什么关系? 16、Jedis与Redisson对比有什么优缺点? 17、Redis如何设置密码及验证密码? 18、说说Redis哈希槽的概念? 19、Redis集群的主从复制模型是怎样的? 20、Redis集群会有写操作丢失吗?为什么? 21、Redis集群之间是如何复制的? 22、Redis集群最大节点个数是多少? 23、Redis集群如何选择数据库? 24、怎么测试Redis的连通性? 25、Redis中的管道有什么用? 26、怎么理解Redis事务? 27

【面试突击】-Redis常见面试题(二)

别来无恙 提交于 2020-04-28 23:18:19
1、什么是Redis?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。 另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 2、Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3

MyBatis 二级缓存实现详解及使用注意事项

大憨熊 提交于 2020-04-28 22:18:52
二级缓存介绍 在上文中提到的一级缓存中,其最大的共享范围就是一个SqlSession内部,如果多个SqlSession之间需要共享缓存,则需要使用到二级缓存。开启二级缓存后,会使用CachingExecutor装饰Executor,进入一级缓存的查询流程前,先在CachingExecutor进行二级缓存的查询,具体的工作流程如下所示。 二级缓存开启后,同一个namespace下的所有操作语句,都影响着同一个Cache,即二级缓存被多个SqlSession共享,是一个全局的变量。 当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。 二级缓存配置 要正确的使用二级缓存,需完成如下配置的。 首先,在MyBatis的配置文件中开启二级缓存。 <setting name="cacheEnabled" value="true"/> 然后,在MyBatis的 Mapper XML 中加入 cache 或者 cache-ref 标签。 cache标签用于声明这个namespace需要使用二级缓存,并且可以自定义配置。 <cache/> type :cache使用的类型,默认是 PerpetualCache ,这在一级缓存中提到过。 eviction : 定义回收的策略,常见的有FIFO,LRU。 flushInterval : 配置一定时间自动刷新缓存,单位是毫秒。

redis为什么设计成单线程并且还这么快?

北城以北 提交于 2020-04-28 09:53:50
一、前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。 如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼格的面试官,你也可以拿这道题去面试对面“望穿秋水”般的小伙伴,测试一下他的掌握程度。 好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的? 二、Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(Strings),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种。 Redis 内置了复制

为什么说Redis是单线程的以及Redis为什么这么快!(转)

大兔子大兔子 提交于 2020-04-28 09:49:28
文章转自https://blog.csdn.net/chenyao1994/article/details/79491337 一、前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。 如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼格的面试官,你也可以拿这道题去面试对面“望穿秋水”般的小伙伴,测试一下他的掌握程度。 好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的? 二、Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(Strings),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial