Redis小记(三)】的更多相关文章

前言: 爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多. 个人以为分布式爬虫需要考虑的点主要有以下几个: 爬虫任务的统一调度 爬虫任务的统一去重 存储问题 速度问题 足够“健壮”的情况下实现起来越简单/方便越好 最好支持“断点续爬”功能 Python分布式爬虫比较常用的应该是scrapy框架加上Redis内存数据库,中间的调度任务等用scrapy-redis模块实现. 此处简单介绍一下基于Redis的三种分布式策略,其实它们之间还是很相似的,只是为适应不同的网络或爬虫…
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 redis入门(三) 目录 redis入门(一) redis入门(二) redis入门(三) 前言 在前两章介绍了Redis的一些常用的API与功能,在本章会对一些其他功能包括事务.脚本.Redis集群搭建工具以及集群动态扩容与故障转移方式进行讲解. 事务 在关系型数据库,我们可以通过事务(transa…
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些必要(比如面试), 本文就一起来学习一下Redis的几种集群方案. Redis支持三种集群方案 主从复制模式 Sentinel(哨兵)模式 Cluster模式 主从复制模式 1. 基本原理 主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(sl…
1.复制 通过slaveof命令或设置slaveof选项,实现一个服务器去复制另一个服务器,被复制的是主服务器,执行复制的是从服务器,复制过程中主从双方数据库保持数据一致 2.8版本以前,可分为初次复制和断线重复制两种情况,断线之后从服务器会向主服务器发送SYNC命令,主服务器收到SYNC命令之后执行BGSAVE命令,创建一个从开始到断线期间的RDB文件,并使用缓冲区记录接下来所执行的命令,并将RDB文件发送给从服务器,从武器进行数据同步,但是这样会占据大量的CPU资源.I/O资源.内存资源以及…
一.Redis持久化 Redis是一个支持持久化的内存数据库,redis需要经常将内存中的数据同步到磁盘来保证持久化. redis提供了不同级别的持久化方法: Snapshotting(快照,默认方式):能够在指定的时间间隔对你的操作进程快照存储 Append-only file(缩写aof):记录每次对服务器写的操作,当服务器重启时会重新执行这些命令来恢复原始的数据 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式 你也可以同时开启两种持久化方法,这种情况下,当redi…
目录 一.Key 二.String 三.Hash 四.List 五.Set 六.SortedSet 七.Pub/Sub 八.Transaction 九.Script 十.Connection 十一.Server 一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键 EXISTS 检查给定 key 是…
一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID. Redis支持简单的事务,将执行命令放入队列缓存,程序中有异常,执行discard回滚,其实只是取消队列命令的执行.但执行exec时,已经执行的命令,是无法回滚的. 但是Redis 的应用场景明显不是为了数据存储的高可靠而设计的,而是为了数据访问的高…
三.程序配置 在C# Redis实战(二)中我们安装好了Redis的系统服务,此时Redis服务已经运行. 现在我们需要让我们的程序能正确读取到Redis服务地址等一系列的配置信息,首先,需要在Web.config文件中添加如下信息: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?Lin…
一Redis 连接 Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG 下表列出了 redis 连接的基本命令: 序号 命令及描述 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING…
一.Redis的五大数据类型 1.String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 .string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 2.Hash(哈希,类似java里的Map) Redis hash 是一个键值对集合.Redis hash是一个s…
一.主从同步的工作原理 redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令.无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存.后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave.如果master同时收到多…
本文转载自编程迷思,原文链接 深入学习Redis(1):Redis内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串.哈希.列表.集合.有序集合),丰富的类型是Redis相对于Memcached等的一大优势.在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助,例如: 1.估算R…
Redis是一个响应式的服务,当client发送一个请求后,就处于堵塞状态等待Redis返回结果. 这样一次命令消耗的时间就包含三个部分:请求从client到server的时间.结果从server到client的时间和命令真正运行时间,前两个部分消耗的时间总和称为RTT(Round Trip Time).当client与server存在网络延时时,RTT就可能会非常大,这样就会导致性能问题. 管道(Pipeline)就是为了改善这个情况的.利用管道,client能够一次性发送多个请求而不用等待s…
一.主从复制 主从复制:主节点负责写数据,从节点负责读数据,从而实现读写分离,提高redis的高可用性. 让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主节点(master),而对主服务器进行复制的服务器则被称为从节点(slave), 如下图所示: 主从复制的特点: 1.一个master可以有多个slave 2.一个slave只能有一个master 3.数据流向是单向的,master到slave 主从复制的作用: 1.数据副本:多一份或多份数据拷贝,保证redis…
1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包含了五大数据对象,字符串对象(string).列表对象(list).哈希对象(hash).集合(set)对象和有序集合对象(zset):而这五大对象的底层数据编码可以用命令OBJECT ENCODING来进行查看. redisObject结构 typedef struct redisObject {…
一.排序 redis 支持对 list,set 和 zset 元素的排序,排序的时间复杂度是 O(N+M*log(M)).(N 是集合大小,M 为返回元素的数量) sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] [BY pattern]:sort 命令默认使用集合元素进行排序,可以通过 "BY pattern"…
一.慢查询分析 许多存储系统(例如MySql)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作. 所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间.耗时.命令的详细信息)记录下来,Redis也提供了类似的功能. Redis客户端执行一条命令分为如下4个部分: 慢查询只统计3.执行命令的时间,所以没有慢查询并不代表客户端没有超时问题. 1.慢查询的两个配置参数 对于慢查询需要明确两件事:预设阈值怎么设置?慢查询记录存放在哪里?…
在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教程合集 使用 Java 操作 Redis 的方案很多,Jedis 是目前较为流行的一种方案,除了 Jedis ,还有很多其他解决方案,如下: 除了这些方案之外,还有一个使用也相当多的方案,就是 Spring Data Redis. 在传统的 SSM 中,需要开发者自己来配置 Spring Data…
如何保障reids的数据安全和性能?   一.持久化选项 1.快照snapshotting 它可以将存在于某一时刻的所有数据都写入硬盘里面. 配置选项示例: save 60 1000 注:从最近一次创建快照之后开始算起,60秒之内有1000次写入满足条件之后,redis开始快照保存. 2.追加文件(append-only-file) AOF 在执行命令时,将被执行的命令复制到硬盘里面. 配置选项示例:appendonly no 两种配置都要配置文件输出位置: 示例:dir /data/redis…
经过前两篇的介绍,我们对整个redis的动作流程已经有比较清晰的认识. 接下来就是到具体的命令处理方式的理解了,想来我们用这些工具的意义也是在此.虽然没有人觉得,一个set/get方法会有难度,但是我们毕竟不是很清楚,否则也不至于在谈到深处就懵逼了. 我觉得本文的一个重要意义就是: 让set/get还原成它本来样子,和写"hello world"一样简单. 框架性质的东西,我们前面已经讲解,就直接进入主题: set/get 的操作. set/get 对应的两个处理函数 (redisCo…
申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用…
复制 在Redis中,用户可以通过SLAVEOF命令或是slaveof选项设置服务器的主从关系,从(SLAVE)服务器会复制主(Master)服务器. 旧版复制功能实现(2.8以前) 旧版复制功能主要分为两个过程: 同步(SYNC)和命令传播(COMMAND PROPGATE). 同步过程: 当从服务器执行SLAVEOF命令时,从服务器会向主服务器发送SYNC命令 主服务器收到SYNC命令后,开始BGSAVE,生成RDB文件,同时使用一个缓冲区记录从同步开始时执行的所有写命令 主服务器执行完BG…
1.redis数据库 redis数据库属于内存数据库,若不将数据存到磁盘中,服务器进程退出,数据也会消失 redis所有数据库都保存在redisServer结构的db数组中,db数组的每一项都是一个redisDb结构,每一个redisDb结构代表一个数据库 初始化服务器时,redis服务会根据dbnum属性来决定创建多少个数据库,dbnum属性有服务器配置的database选项决定,默认为16 通过select num 命令来切换数据库,因为客户端状态结构redisClient结构的db属性记录…
1.redis的数据结构 (1)动态字符串(SDS) redis自身构建了一个简单动态字符串的抽象类型,SDS,在redis里,包含字符串的键值对在底层都是由SDS来实现的. 除了用来保存数据库的字符串值之外,SDS还被用来作缓冲区:AOF模块中的AOF缓冲区.客户端输入缓冲区. SDS的结构:free,当free属性值为0时,表示SDS没有分配未使用空间:len,SDS保存的字符串长度:buf[],char数组类型,将保存的字符串值拆分保存,最后跟一个空字符  \0  ,空字符不计算到len属…
一.安装部署 1.常规安装 1.安装 # wget http://download.redis.io/releases/redis-3.0.7.tar.gz # tar xf redis-3.0.7.tar.gz # cd redis-3.0.7 # make PREFIX=/usr/local/redis install # cp redis_init_script /etc/init.d/redis # chmod +x /etc/init.d/redis 2.修改配置文件1) 修改启动脚本…
转载:http://www.tuicool.com/articles/aQbQ3u Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/usr/local/bin目录下.这样就可以直接敲名字运行程序了. make install 启动 #加上`&`号使redis以后台程序方式运行 ./redis-server…
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方. 发送方:只负责向第三方发送消息.(杂志社把读者杂志交给邮局) 接收方:被动接收消息.(1:向邮局订阅读者杂志,2:门口去接邮过来的杂志) 第三方作用是:存储订阅杂志的接收方,并在杂志过来时送给接收方. (邮局) C#示例,发送方把杂志放到邮局里面: if (QA.AddBug…
 一.概述: redis的list类型其实就是一个每个子元素都是string类型的双向链表.所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1) 另外list会记录链表的长度.所以llen操作也是O(1).链表的最大长度是(2的32次方-1).我们可以通过push,pop操作从链表的头部 或者尾部添加删除元素.这使得list既可以用作栈,也可以用作队列.有意思的是list的pop操作还有阻塞版本的.当我们[lr]pop一个 list对象是,如果list是空,或者不存在,会立即返回…
Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/usr/local/bin目录下.这样就可以直接敲名字运行程序了. make install 启动 #加上`&`号使redis以后台程序方式运行 ./redis-server & 检测 #检测后台进程是否存在 ps -ef |grep redis #检测…
 据说60%的人使用redis看重的是redis中的list类型,那这个list有什么用呢???不用我说大家都明白,做队列使用呗,为什么用它呢,很简单呗, 因为有了它我就不需要专门的MQ产品啦,比如说RabbitMQ,ActiveMQ等等...对吧. 一:实战 先我们还是看一下List列表给我们提供的方法. 这些方法还是稀里糊涂的有一些的,没关系,做队列使用的话,常用的也就四个:LPOP,LPUSH,RPOP,RPUSH,从这四个单词上面,你应该就明白这 有点像数据结构中的“双端队列”,对吧,既…