redis分布式

REDIS

限于喜欢 提交于 2019-12-01 20:21:39
1. Redis前提 a) 缓存 i. 什么是缓存 缓存就是在内存中存储的数据备份。 ii. 为什么使用缓存 每次需要数据都去数据库查询,很耗时间,而从内存中读取数据比去数据库查询要快很多。 iii. 缓存的优点 减少查询数据库次数,提高网页的访问速度。对于经常不改变的数据可以保存到缓存中。 iv. 缓存的主流技术 redis memcache 两者区别 a) 从缓存命中,Memcache要略高于Redis b) 但是Redis的功能更加强大 b) nosql(not only sql)数据库:泛指非关系型的数据库。 2. Redis的介绍 1.简介 Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并且借助许多高层级的接口使其可以胜任缓存、队列系统的不同角色 2.特性 Redis多种数据类型存储: 字符串类型(String) 散列类型(hashes) 列表类型(lists) 集合类型(sets) 有序集合类型(sortedrets) 内存存储与持久化: 内存的读写速度快于硬盘‘ 自身提供了持久化功能(RDB,AOF两种方式) a) RDB快照(snapshortting):是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是Snapshot快照(数据库中所有键值对数据)。恢复时直接将快照文件读到内存中。 b

scripy-redis分布式爬虫

▼魔方 西西 提交于 2019-12-01 17:34:22
第一步 下载scrapy模块:   pip install scrapy-redis 第二步 创建项目   在终端/cmd进入创建项目的目录:  cd 路径: scrapy startproject douban(项目名)   导入到pycharm中 第三步 创建爬虫类   1.在terminal中进入项目中的spiders目录:   输入scrapy genspider douban_spider movie.douban.com(爬虫,爬取域的范围) 第四步 设置   非分布式爬虫设置:   1.将ROBOTSTXT_OBEY = True 改为 False   2.打开管道: ITEM_PIPELINES = { 'JD_redis.pipelines.JdRedisPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400, # 分布式爬虫中添加 }   3.打开该设置并修改: DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent': "Mozilla/5.0 (Windows NT 10

redis 缓存问题,转载:https://www.cnblogs.com/liangsonghua/p/www_liangsonghua_me_22.html

橙三吉。 提交于 2019-12-01 16:44:10
缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且处于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 解决办法: 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用 布隆过滤器 ,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们 仍然把这个空结果进行缓存 ,但它的过期时间会 很短 ,最长不超过五分钟。 缓存雪崩 缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过大雪崩。 解决方案: 缓存失效时的雪崩效应对底层系统的冲击非常可怕。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。这里分享一个简单方案就时讲缓存失效时间分散开,比如我们可以 在原有的失效时间基础上增加一个随机值,比如1-5分钟随机 ,这样每一个缓存的过期时间的重复率就会降低

瞬时高并发(秒杀/活动)Redis方案

◇◆丶佛笑我妖孽 提交于 2019-12-01 15:51:26
1 、 Redis 丰富的数据结构(Data Structures ) 字符串(String ) Redis字符串能包含任意类型的数据 一个字符串类型的值最多能存储512M字节的内容 利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用 使用APPEND命令在字符串后添加内容 列表(List ) Redis列表是简单的字符串列表,按照插入顺序排序 你可以添加一个元素到列表的头部(左边:LPUSH)或者尾部(右边:RPUSH) 一个列表最多可以包含232-1个元素(4294967295,每个表超过40亿个元素) 在社交网络中建立一个时间线模型,使用LPUSH去添加新的元素到用户时间线中,使用LRANGE去检索一些最近插入的条目 你可以同时使用LPUSH和LTRIM去创建一个永远不会超过指定元素数目的列表并同时记住最后的N个元素 列表可以用来当作消息传递的基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库 集合(Set ) Redis集合是一个无序的,不允许相同成员存在的字符串合集(Uniq操作,获取某段时间所有数据排重值) 支持一些服务端的命令从现有的集合出发去进行集合运算,如合并(并集:union),求交(交集:intersection),差集, 找出不同元素的操作(共同好友、二度好友) 用集合跟踪一个独特的事

REDIS 在电商中的实际应用场景(转)

末鹿安然 提交于 2019-12-01 15:04:49
话说使用Redis已经有好一段时间,趁有点时间,结合Guang.com 使用经验,总结一下Redis 在社会化电商网站的实际应用场景。文笔较差,各位看官,凑合着看下吧。 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数。 商品维度计数(喜欢数,评论数,鉴定数,浏览数,etc) 采用Redis 的类型: Hash . 如果你对redis数据类型不太熟悉,可以参考 http://redis.io/topics/data-types-intro 为product定义个key product: ,为每种数值定义hashkey, 譬如喜欢数 xihuan redis> HSET product:1231233 xihuan 5 (integer) 1 redis> HINCRBY product:1231233 xihuan 1 //喜欢数+1 (integer) 6 redis> HGETALL product:1231233 //获取这key hashkey 和value 1) "xihuan" 2) "6" 用户维度计数(动态数、关注数、粉丝数、喜欢商品数、发帖数 等) 用户维度计数同商品维度计数都采用 Hash .

Redis实战核心原理详解(1)Redis简介以及和其他缓存数据库的区别

孤者浪人 提交于 2019-12-01 11:41:29
一、Redis简介 Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(Strings),散列(Hashes),列表(Lists),集合(Sets),有序集合(Sorted Sets或者是ZSet) 与范围查询, Bitmaps,Hyperloglogs 和 地理空间(Geospatial)索引半径查询。 其中常见的数据结构类型有String、List、Set、Hash、ZSet这5种 。 Redis 内置了复制(Replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(Transactions) 和不同级别的磁盘持久化(Persistence), 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。 Redis也提供了持久化的选项,这些选项可以让用户将自己的数据保存到磁盘上面进行存储。根据实际情况, 可以每隔一定时间将数据集导出到磁盘(快照),或者追加到命令日志中(AOF只追加文件),他会在执行写命令时,将被执行的写命令复制到硬盘里面。您也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用。 Redis不使用表

分布式如何实现session共享

♀尐吖头ヾ 提交于 2019-12-01 11:33:34
最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题来了,server没有该用户的session,所以需要用户重新登录,这时的用户体验会非常不好,所以我们想如何实现多台server之间共享session,让用户状态得以保存。 当然业界已经有很多成熟的解决方案,我罗列如下: 1.服务器实现的session复制或session共享,这类型的共享session是和服务器紧密相关的,比如webSphere或JBOSS在搭建集群时候可以配置实现session复制或session共享,但是这种方式有一个致命的缺点,就是不好扩展和移植,比如我们更换服务器,那么就要修改服务器配置。 2.利用成熟的技术做session复制,比如12306使用的gemfire,比如常见的内存数据库如redis或memorycache,这类方案虽然比较普适,但是严重依赖于第三方,这样当第三方服务器出现问题的时候,那么将是应用的灾难。 3.将session维护在客户端,很容易想到就是利用cookie,但是客户端存在风险,数据不安全,而且可以存放的数据量比较小,所以将session维护在客户端还要对session中的信息加密。

Redis一些基本知识面试问题

好久不见. 提交于 2019-12-01 09:58:14
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

mysql-count(14)

六眼飞鱼酱① 提交于 2019-12-01 07:59:32
1, 不同的引擎有不同的实现方式。myisam直接存在磁盘上,可以直接读取。innodb需要一行行读,再进行累计。 2 ,innodb因为mvcc(多版本并发控制)的原因,同一时刻不同回话查询的数据可能不一致, 3, show table status可以显示表行数,但是不准确。 4, 所以如何计数呢:一是使用缓存,插入一行数据,key就加一,删除就减一,但是redis可能因为重启导致存在丢失更新情况,但即使redis正常工作也会出现数据不准确的问题:因为redis跟db无法支持分布式事务,所以在写的两次操作的中间环节进来一个读线程,无论先读db还是先读redis都可能会出现不准确的问题。 二是使用数据库另一张表进行计数。依靠的是事务之前的隔离性。更新记录数与添加新纪录在一个事务中,如果未提交事务,其中的操作对外面的事务是不可见的。注意代码中的顺序,要先添加新记录,再更新记录数,因为更新记录数会触发行锁,只有在事务提交的时候才会释放行锁,如果放在程序最后,会大大提高并发度。 5, count的几种方式的效率比较。count(*)~=count(1)>count(主键)>count(某一个字段) 来源: https://www.cnblogs.com/enchaolee/p/11671533.html

Redis学习笔记

≡放荡痞女 提交于 2019-12-01 07:55:23
Redis的作用 易扩展:NoSQL数据库种类繁多,而且一个共同的特点就是去掉关系型数据库的关系型特性,数据之间无关系,就非常容易扩展,在架构层面上提高了扩展性。 大数据量高性能:具有非常高的性能,尤其在大数据下,表现同样优秀,得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache每次表的更新就失效,是一种大力度的cache,针对web2.0的交互频繁使用,Cache的性能不高,而NoSQL的cache是记录级 的,是一种细粒度的cache。 多样灵活的数据模型:NoSQL无须为存储的数据建立字段,随时可以存储自定义的数据格式,而在关系型数据库中,增删字段非常麻烦,大量数据的表,增加字段是一个噩梦。 传统Rdbms vs Nosql:   传统RDBMS:高度组织化结构化数据,结构化查询语言(SQL),数据和关系都存储在具体的表中,数据操纵语言-数据定义语言,严格的一致性,事务   NoSQL:代表不仅仅是SQL,没有声明性查询语言,没有预定义的模式,键值对存储、列存储、文档存储、图形库存储,最终一致性而非acid属性,非结构化和不可预知的数据,cap原理,高性能、高可用和伸缩性 Redis,Mongdb,MemoryCache NoSQL数据模型:聚合模式(KV键值,Bson-类似于json串的数据表达,列族,图形) NoSQL数据库四大模型: KV键值