redis分布式

redis简介

时光总嘲笑我的痴心妄想 提交于 2019-12-01 07:48:44
1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Redis的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据。 因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。 3.使用redis有哪些好处? 速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型:支持string,list,set,sorted set,hash 支持事务:操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 4.mySQL里有2000w数据,redis中只存20w的数据

深度解析数据缓存技术

旧街凉风 提交于 2019-12-01 07:13:32
1.缓存概述 ​ 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 1.1.缓存的原理 将数据写入/读取速度更快的存储(设备); 将数据缓存到离应用最近的位置; 将数据缓存到离用户最近的位置; 1.2.缓存分类 在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用: - CDN缓存; - 反向代理缓存; - 分布式Cache; - 本地应用缓存; 1.3.缓存媒介 常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等; 缓存的内容:文件,数据,对象; 缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式) 1.4.缓存设计 缓存设计需要解决以下几个问题: 1>缓存什么?哪些数据需要缓存:1.热点数据;2.静态资源。 2>缓存的位置?CDN,反向代理,分布式缓存服务器,本机(内存,硬盘) 3>如何缓存的问题? - 过期策略 - 固定时间:比如指定缓存的时间是30分钟; - 相对时间:比如最近10分钟内没有访问的数据; - 同步机制 - 实时写入;(推) - 异步刷新;(推拉) 2.CDN缓存 ​ CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。国内网络异常复杂,跨运营商的网络访问会很慢

实战SSM_O2O商铺_45【Redis缓存】配置Redis在Service层加入缓存

风流意气都作罢 提交于 2019-12-01 06:55:20
文章目录 概述 Windows下安装Redis O2O-Service层加入缓存的配置步骤 1. pom.xml 添加jedis依赖包 2. redis配置文件 3.spring-dao.xml加载redis.properties 4.封装JedisPool,用于创建JedisPool 5.封装操作redis的工具类 JedisUtil 6.新建spring-redis.xml 配置redis连接池和bean 7. web.xml中加载spring-redis.xml 8.Service层使用缓存 9.单元测试 9.1 BaseTest基类中加载 classpath:spring-redis.xml 9.2 debug调测 10 Redis中验证数据 Github地址 概述 Redis 是一个高性能的key-value数据库。 Redis性能十分优越,可以支持每秒十几万次的读/写操作,其性能远超数据库,并且支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,它还能支持一定的事务能力,这在高并发访问的场景下保证数据安全和一致性特别有用。 Windows下安装Redis 我这里的是windows的操作系统,下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads

Windows下搭建Redis服务器

独自空忆成欢 提交于 2019-12-01 04:57:43
原文地址:: https://blog.csdn.net/e62ces0iem/article/details/73477182 Redis服务器是当下比较流行的缓存服务器,Redis通常被人拿来和Memcached进行对比。在我看来,应当是各具优势吧,虽然应用场景基本类似,但总会根据项目的不同来进行不通的选用。 我们今天主要讲Redis在windows平台下的安装和部署。进入正题-> 一、单机部署使用Redis 1、下载Redis,我选用的是当下的最新版本3.2.0 地址在这里 https://github.com/MSOpenTech/redis/releases 下载好之后,直接解压到任意位置,我存放在了 D:\Program Files\Redis-x64-3.2.100 2、运行cmd命令启动Redis服务。 redis-server.exe redis.windows.conf 这里需要注意的是一定要带后面的启动参数,如果对配置文件修改完没有带启动参数并不会生效的,所以一定记得带参数。 这样服务就算启动成功了,这个窗口是服务终端,如果窗口被关闭,对应的服务也会停止。 3、继续cmd命令启动客户端。 客户端连接服务成功。 4、设置和获取数据操作。 使用Set命令存入一个数据。 用Get命令获取数据。 至此,我们简单地redis安装部署并存入数据命令操作已经概括完毕。 二

Redis分片机制

主宰稳场 提交于 2019-12-01 04:53:35
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 前两篇文章对Redis主从复制和主从切换的知识点进行了介绍,但是也很明显的有一点小弊端: 需要定时进行主从复制会影响Redis性能。 主节点宕机后,从所有从节点选择进行主从切换。主从切换的过程中非服务不可用。 引入分片概念--分片机制的作用 而本篇文章主要谈谈Redis的分片机制,如果没有分片机制,Redis就被局限于单机所支持的内存容量。Redis的分片机制允许数据拆分存放在不同的Redis实例上,每个Redis实例只包含所有键的子集。可以减轻单台Redis的压力,提升Redis扩展能力和计算能力。如果我们只使用一个Redis实例,当Redis宕机将会直接停止服务,所以我们可以采取分片机制,将原本一台Redis实例维护的数据,改为由多个Redis实例共同维护这部分数据。 分片方案 (1)范围分片 分片需要将不同key映射到不同Redis实例上存储,所以key的映射规则需要制定一个算法,最简单的一个分片方案应该是范围分片。范围分片理解起来很简单,比如我们存储用户基本信息,我们制定一个算法将用户user_id从0到1000映射到实例A,user_id从1000到2000映射到实例B,以此类推。这个方案很轻松可以使用,但是引发了一个问题:我们需要维护user_id范围和映射实例之间的关系

redis-缓存穿透与缓存雪崩

老子叫甜甜 提交于 2019-12-01 03:35:57
缓存穿透 缓存系统,按照 KEY 去查询 VALUE, 当 KEY 对应的 VALUE 一定不存在的时候并对 KEY 并发请求量很大的时候,就会对后端造成很大的压力。 如何避免 1. 对查询机构为空的情况也进行缓存,缓存的时间设置端一点,或者对该 KEY 对应的数据 insert 之后清理缓存。 2. 对一定不存在的 key 进行过滤,可以把所有存在的 key 放到一个大 bitmap 中,查询时通过该 bitmap 过滤。 缓存雪崩 分布式缓存系统面临的问题 缓存一致性问题 1 :缓存系统与底层数据的一致性。这点在底层系统是“可读可写”时,写得尤为重要 2 :有继承关系的缓存之间的一致性。为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存。他们是存在继承关系的。全局缓存可以有二级缓存来组成。 3 :多个缓存副本之间的一致性。为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如 memcache , redis 等) 缓存穿透和缓存雪崩 上面有讲述。 缓存数据的淘汰 缓存淘汰的策略有两种: (1) 定时去清理过期的缓存。 ( 2 )当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。 两者各有优劣,第一种的缺点是维护大量缓存的 key 是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂

Scrapy-redis源码学习

不羁岁月 提交于 2019-12-01 03:22:28
defaults: 默认参数配置 connection: 建立 Redis 连接 utils queue: 任务调度队列 dupefilter: 实现 request 去重 scheduler: 远程任务调度 spiders: 赋予 Scrapy spiders 远程调度 pipelines: 默认数据收集存储 Scrapy 是 Python 的一个非常强大的爬虫库,但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。而 scrapy_redis 就是结合了分布式数据库 Redis,重写了 Scrapy 的任务调度器,将 Scrapy 变成一个可以在多个主机上同时运行的分布式爬虫。 scrapy_redis 工程的主体还是是 Redis 和 Scrapy 两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。下面我们来看看,scrapy_redis 的每一个源代码文件都实现了什么功能,最后如何实现分布式的爬虫系统。 defaults: 默认参数配置 本模块主要定义了一些默认参数,这些都可以在 Scrapy 的 settings 中设置: Redis 连接参数 REDIS_CLS REDIS_ENCODING REDIS_PARAMS PIPELINE_KEY

Redis 简介

岁酱吖の 提交于 2019-12-01 02:50:36
1.redis是什么? redis(remote dictionary server):是一个以key-value形式存储于内存中的数据库. 提供了 String / List / Set / Sort Set /Hash 五种数据结构。 服务器在断电之后,仍然可以恢复到断电之前的状态。 简言之:Redis嘛,就是一种运行速度很快,并发很强的跑在内存上的NoSql数据库,支持键到五种数据类型的映射。 资料: 官网 : http://redis.io 中文网: http://www.redis.cn/ 相关文档: http://redisdoc.com/ 知乎: https://zhuanlan.zhihu.com/p/81195864 2.redis特点? 线程模型:单线程-多路复用io模型 性能高:支持读 11万/秒 , 写 8万/秒 存储: 内存 ; RDB文件(二进制安全的真实数据) ; AOF文件(客户端的命令集合) 事务: 支持事务(每个客户端串行执行命令,其他客户端处于阻塞状态) 发布/订阅模式: 3.redis数据类型 String:动态字符串(每个key都是一个String) 编码方式:int / raw() /embstr 应用场景:普通的string场景 List:列表结构,有序可重复的结构。它拥有队列的特性。 编码方式:ziplist / linkedlist

【SpringBoot系列】七、SpringBoot 中使用Redis缓存

佐手、 提交于 2019-12-01 01:30:16
在项目中对数据的访问往往都是直接访问数据库的方式,但如果对数据的访问量很大或者访问很频繁的话,将会对数据库来很大的压力,甚至造成数据库崩溃。为了解决这类问题redis数据库脱颖而出,redis数据库出现时是以非关系数据库的光环展示在广大程序猿的面前的,后来redis的迭代版本支持了缓存数据、登录session状态(分布式session共享)等。所以又被作为内存缓存的形式应用到大型企业级项目中。 本章节主要讲述如何在SpringBoot项目中使用Redis。 1、Redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value非关系性数据库(NoSql)。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 1.1 数据结构介绍 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。 结构类型 结构存储的值 读写能力 String

常见面试题(Redis)

六眼飞鱼酱① 提交于 2019-11-30 23:58:59
Redis:   Redis支持的数据类型? String字符串、Hash(哈希)、List(列表)、Set(集合)、zset(sorted set:有序集合) 如何解决缓存雪崩:   我们先说一下什么是缓存雪崩吧~   简单来说就是Redis挂掉了,请求全部走数据库。   还有就是 如果缓存数据 设置的过期时间是相同 的,并且Redis恰好将这部分数据全部删光了。这就会导致在这段时间内,这些缓存 同时失效 ,全部请求到数据库中。这就是缓存雪崩。 如何解决?   第一种的话: 事发前:实现Redis的 高可用 (主从架构+Sentinel 或者Redis Cluster),尽量避免Redis挂掉这种情况发生。 事发中:万一Redis真的挂了,我们可以设置 本地缓存(ehcache)+限流(hystrix) ,尽量避免我们的数据库被干掉(起码能保证我们的服务还是能正常工作的) 事发后:redis持久化,重启后自动从磁盘上加载数据, 快速恢复缓存数据 。   第二种:   在缓存的时候给过期时间加上一个 随机值 ,这样就会大幅度的 减少缓存在同一时间过期 。 如何解决缓存穿透:   缓存穿透是什么?     请求的数据在缓存大量不命中,导致请求走数据库。然后搞垮数据库。   如何解决呢?     有两种方案: 由于请求的参数是不合法的(每次都请求不存在的参数)