redis分布式

Redis-初识

為{幸葍}努か 提交于 2019-11-30 14:46:57
Redis简介:   利用C语言开发,开源的,支持网络交互的,基于键值对的高性能存储服务系统,经典使用场景包含:缓存、计数器、消息队列、排行榜、社交网络、实时系统 特性:   速度快     ---数据存储在内存中,单线程运行,每秒可达10W次读写   持久化     ---Redis中所有数据保存在内存中,对数据的更新将异步保存到磁盘。包含RDB和AOF两种持久化方式。   支持多种数据结构     ---主要:String/Blobs/Bitmaps、Hash Table、LinedLists、Sets、Sorted Sets     ---衍生:BitMaps:位图、HyperLoglog:超小内存唯一值计数、GEO:地理位置系列   支持多种编程语言:     ---Java、Php、Python、Ruby、Node.js   功能丰富:     ---包含发布订阅、Lua脚本、事务、pipeline   主从复制:     ---主服务器及从服务器,服务器同步为高可用(Reids-Sentinel),分布式提供支持(Redis-Cluster) Redis安装:基于CentOS7   单机版: wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar -xzf redis-3.0.7.tar.gz ln

细谈Redis五大数据类型

对着背影说爱祢 提交于 2019-11-30 13:22:08
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String、List、Hash、Set、SortSet。上一篇文章只是单纯介绍了下这5种数据类型使用到的指令以及常用场景,本篇文章会谈谈5种数据类型的底层数据结构以及各自常用的操作命令来分别进行解析。Redis作为目前最流行的Key-Value型内存数据库,不仅数据库操作在内存中进行,并且可定期的将数据持久化到磁盘中,所以性能相对普通数据库高很多,而在Redis中,每个Value实际上都是以一个redisObject结构来表示: typedef struct redisObject{ unsigned type:4; unsigned encoding:4; void *ptr; int refCount; unsigned lru: } 我们可以看看这几个参数分别的含义: type:对象的数据类型,一般情况就是5大数据类型。 encode:redisObject对象底层编码实现,主要编码类型有简单动态字符串,链表,字典,跳跃表,整数集合及压缩列表。 *ptr:指向底层实现数据结构的指针。 refCount:计数器,当引用计数值为0将会释放对象。 lru:最后一次访问本对象的时间。 String数据类型 String 数据结构是简单的

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

别来无恙 提交于 2019-11-30 12:59:11
.NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中。对于分布式缓存,.NET Core提供了针对Redis和SQL Server的原生支持。除了这个独立的缓存系统之外,ASP.NET Core还借助一个中间件实现了“响应缓存”,它会按照HTTP缓存规范对整个响应实施缓存。不过按照惯例,在对缓存进行系统介绍之前,我们还是先通过一些简单的实例演示感知一下如果在一个ASP.NET Core应用中如何使用缓存。 目录 一、将数据缓存在内存中 二、基于Redis的分布式缓存 三、基于SQL Server的分布式缓存 四、缓存整个HTTP响应 一、将数据缓存在内存中 与针对数据库和远程服务调用这种IO操作来说,应用针对内存的访问性能将提供不止一个数量级的提升,所以将数据直接缓存在应用进程的内容中自然具有最佳的性能优势。与基于内存的缓存相关的应用编程接口定义在NuGet包“Microsoft.Extensions.Caching.Memory”中,具体的缓存实现在一个名为MemoryCache的服务对象中,后者是我们对所有实现了IMemoryCache接口的所有类型以及对应对象的统称。由于是将缓存对象直接置于内存之中,中间并不涉及持久化存储的问题,自然也就无需考虑针对缓存对象的序列化问题

Redis数据库之服务器主从配置

回眸只為那壹抹淺笑 提交于 2019-11-30 12:58:21
目的   主要培养对分布式REDIS主从复制架构运用的能力。理解并掌握REPLICATION工作原理的同时,能独立配置Replication ,使数据库运行在主从架格上。针对主从复制架构的运用,着力掌握SLAVEOF端口的修改方法。 操作 1、配置SLAVE。     将SLAVEOF端口改为非默认的6380,然后通过客户端建立相应的主从关系连接。   2.对连接上的客户机进行访问与删除的操作 模仿主从关系架构,从机是对主机不能进行修改只能保持读的关系。由于系统性能的问题,我这里 出现主从不能及时同步的问题,在耐心的几分钟等待后,同步正常。 总结 通过实验,相关的收获和经验可分点总结如下: 对连接上的客户机进行访问与删除的操作,模仿主从关系架构,从机是对主机不能进行修改只能保持读的关系。关键根据返回的“<error> READONLY You can't write against a read only slave.”字段进行判断。 当Redis返回如下错误时: “<error>MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Ple

Redis集群

随声附和 提交于 2019-11-30 12:47:29
 这节介绍Redis的集群模式  主从模式提供了读写分离的支持,Sentinel提供了高可用的保障,满足了读模式下的横向扩展,但主节点只有一个,集中式的写模式无法应对不断增长的写需求。  Redis 3.x 版本提供了Redis cluster 功能,服务端sharding使用槽作为分布式的解决方案。对于 2.x版本,则通过客户端API提供的客户端sharding方式,使用一致性哈希来实现数据分片。此外,twiter开源的 twemproxy 和豌豆荚的 codis ,则采用代理模式来实现。 1 服务端模式  对于客户端来说,整个集群被看做一个整体,客户端可以连接任意一个节点进行操作,就像操作单一Redis数据库一样。当客户端操作的key没有分配到该节点上时,会返回转向指令,指向正确的节点。 1.1 集群的建立  3.x 版本的Redis节点可以通过打开 clustrer-enabled 选项来开启服务器的集群模式,再通过 CLUSTER MEET <ip> <port> 命令连接其他节点。  新加入的节点B通过 CLUSTER MEET 命令同节点A建立连接后,节点A会通过 Gossip协议 将节点B的信息传播给集群中的其他节点,当其他节点发现新加入的节点B后也会主动同它建立连接。处于集群状态的节点同单机模式下的服务器实例没什么区别,只是只能使用 db 0 数据库

新兵训练营系列课程——海量数据存储基础

Deadly 提交于 2019-11-30 10:40:15
新兵训练营系列课程——海量数据存储基础 2015年8月12日 09:24 阅读 16831 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了 5 年的发展历程。伴随着从数据及业务暴发式增长,我们在海量数据存储方面遭遇了诸多挑战,与此同时也伴随着丰富经验的积累。 本次新兵训练营,受众在于应届毕业生,目的在于让新同学系统化并且有针对性的了解平台的核心技术及核心业务,以使新同学在新兵训练营结束后,能够对平台的底层架构与业务有一定的了解。 本文主要面向新同学介绍平台的核心技术之一——海量数据存储,主要介绍在海量数据存储在大规模分布式系统下的架构变迁与设计。 课程大纲: 1. 课程目标 2. 存储服务概述 3. MySQL 与 MySQL 分布式架构设计 4. Redis 与 Redis 分布式架构设计 5. 思考与讨论 一、课程目标 1. 了解存储服务概况,以及RDBMS及NoSQL的差异 2. 理解MySQL、Redis、HBase基本实现机制、特性、适用场景 3. 理解几种存储产品的大规模分布式服务方案 4. 学会使用平台的MySQL、 Redis client组件 5. 理解对于MySQL、Redis分布式系统设计想要注意的问题 6. 了解平台几种典型案例 7. 理解几种存储产品在平台的定制修改与名词术语 二、存储服务概述 1. 关系型数据库是基于 实体关系模型(Entity

redis和memcache的区别

主宰稳场 提交于 2019-11-30 10:36:37
memcache官方定义 Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. redis官方定义 Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. 版权相同 它们都是使用的bsd协议,使用它的项目可以用于商业用户,不必发布二次修改的代码,可以修改源代码。 数据类型 redis数据类型丰富,支持set liset等类型 memcache支持简单数据类型,需要客户端自己处理复杂对象 持久性 redis支持数据落地持久化存储 memcache不支持数据持久存储 分布式存储 redis支持master-slave复制模式

Redis实战和核心原理详解(9)RDB和AOF的优缺点对比以及如何选择

▼魔方 西西 提交于 2019-11-30 10:11:36
一、RDB的优缺点 1.1、RDB的优点 (1)RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景。 RDB做会生成多个文件,每个文件都代表了某一个时刻的Redis完整的数据快照; RDB这种多个数据文件的方式,非常适合做冷备,因为大量的一个个的文件,可以每隔一定的时间,复制出来; 可以将这种完整的数据文件发送到一些远程的云服务、分布式存储上进行安全的存储,以预定好的备份策略来定期备份Redis中的数据; AOF也可以做冷备,只有一个文件,但是你可以写个脚本,每隔一定时间,去copy一份这个文件出来,相对比较麻烦,不推荐; 问题:RDB做冷备,优势在哪儿呢? 由Redis去控制固定时长生成快照文件的事情,比较方便; AOF,还需要自己写一些脚本去做这个事情,各种定时; RDB数据做冷备,在最坏的情况下,提供数据恢复的时候,速度比AOF快; (2)相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速; 问题:为什么恢复的时候RDB比AOF快? AOF,存放的指令日志,做数据恢复的时候,其实是要回放和执行所有的指令日志,来恢复出来内存中的所有数据的; RDB,就是一份数据文件,恢复的时候,直接加载到内存中即可; RDB的时候,Redis主进程只需要fork一个子进程,让子进程执行磁盘IO操作来进行RDB持久化即可; (3

redis持久化RDB和AOF(2)

别说谁变了你拦得住时间么 提交于 2019-11-30 10:10:14
一、redis持久化的意义 redis持久化的意义,在于故障恢复 比如你部署了一个redis,作为cache缓存,当然也可以保存一些较为重要的数据 如果没有持久化的话,redis遇到灾难性故障的时候,就会丢失所有的数据 如果通过持久化将数据搞一份儿在磁盘上去,然后定期比如说同步和备份到一些云存储服务上去,那么就可以保证数据不丢失全部,还是可以恢复一部分数据回来的 二、为什么要持久化 我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据、高并发、高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去 比如你redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 重启redis,尽快让它对外提供服务,但是就像上一讲说,如果你没做数据备份,这个时候redis启动了,也不可用啊,数据都没了 很可能说,大量的请求过来,缓存全部无法命中,在redis里根本找不到数据,这个时候就死定了,缓存雪崩问题,所有请求,没有在redis命中,就会去mysql数据库这种数据源头中去找,一下子mysql承接高并发,然后就挂了 mysql挂掉,你都没法去找数据恢复到redis里面去,redis的数据从哪儿来?从mysql来。。。 如果你把redis的持久化做好,备份和恢复方案做到企业级的程度

Redis的RDB和AOF两种存储方式

佐手、 提交于 2019-11-30 10:09:38
Redis其实就是一个用C语言写的一个程序,这个程序用来存储 key-value数据,数据先放在内存,然后写入磁盘指定位置。 这么理解十分肤浅,但tm好像就是这样啊。 下面我们梳理一下Redis存储两种方式: RDB和AOF 第一种方式:RDB(Redis DataBase) RDB是将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 在Redis中,默认开启RDB方式进行数据存储,redis.conf中的 具体配置参数如下 ; #dbfilename:持久化数据存储在本地的文件 dbfilename dump.rdb (dump.rdb为存储的文件名,redis通过io流将内存中的数据,写入该文档) #dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下 dir ./ #save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key时间隔300s进行存储;更改10000个key时间隔60s进行存储。 save 900 1 save 300 10 save 60 10000 这里我们可以继续添加,也可以修改参数 比如 save 10 10000 10000个数据时间间隔10s就持久化 使用命令进行持久化save存储: .