Redis研究
文章平均质量分 78
小地盘
这个作者很懒,什么都没留下…
展开
-
Redis数据丢失及解决
Redis的数据回写机制Redis的数据回写机制分同步和异步两种,同步回写即SAVE命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的。异步回写即BGSAVE命令,主进程fork后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死,一般默认会采用这个方法。个人感觉方法2采用fork转载 2014-11-10 13:59:13 · 2133 阅读 · 1 评论 -
Redis研究(十五)—任务队列
在网站开发中,当页面需要进行如发送邮件、复杂数据运算等耗时较长的操作时会阻塞页面的渲染。为了避免用户等待太久,应该使用独立的线程来完成这类操作。不过一些编程语言或框架不易实现多线程,这时很容易就会想到通过其他进程来实现。设想有一个进程能够完成发邮件的功能,那么在页面中只需要想办法通知这个进程向指定的地址发送邮件就可以了。 通知的过程可以借助任务队列来实现。任务队列顾名思义,原创 2015-01-25 10:58:40 · 3997 阅读 · 1 评论 -
Redis研究(十七)—SORT排序
一、有序集合的集合操作 集合类型提供了强大的集合操作命令,但是如果需要排序就要用到有序集合类型。Redis的作者在设计Redis的命令时考虑到了不同数据类型的使用场景,对于不常用到的或者在不损失过多性能的前提下可以使用现有命令来实现的功能,Redis就不会单独提供命令来实现。这一原则使得Redis在拥有强大功能的同时保持着相对精简的命令。 有序集合常见的使用场景是大原创 2015-01-25 20:30:39 · 7083 阅读 · 1 评论 -
Redis研究(十八)—管道(pipeline)
客户端和Redis使用TCP协议连接。不论是客户端向Redis发送命令还是Redis向客户端返回命令的执行结果,都需要经过网络传输,这两个部分的总耗时称为往返时延。根据网络性能不同,往返时延也不同,大致来说到本地回环地址(loop back address)的往返时延在数量级上相当于Redis处理一条简单命令(如LPUSH list 1 2 3)的时间。如果执行较多的命令,每个命令的往返时延原创 2015-01-25 21:12:55 · 3299 阅读 · 6 评论 -
Redis与Memcached的区别
Redis与Memcached的区别传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容转载 2015-03-15 11:42:20 · 739 阅读 · 0 评论 -
Memcached 及 Redis 架构分析和比较
Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等)也很相似,在这里把两者放在一起做一下对比的介绍 基本架构和思想 首先简单介绍一下两者的架构和设计思路 Memcached Memcached采用客户端-服务器的架构,客户端和服务器端的通讯转载 2015-03-15 11:36:32 · 634 阅读 · 0 评论 -
Redis, Memcache, Mysql区别
在使用Redis过程中,我们发现了不少Redis不同于Memcached,也不同于MySQL的特征。(本文主要讨论Redis未启用VM支持情况)1. SchemaMySQL: 需事先设计Memcached: 无需设计Redis: 小型系统可以不用,但是如果要合理的规划及使用Redis,需要事先进行类似如下一些规划数据项: value保存的内容是什么,如用户资料Red原创 2015-03-15 10:10:32 · 2336 阅读 · 1 评论 -
Redis 3.0.0 正式版出炉,高性能 K/V 服务
Redis 3.0.0 正式版终于到来了,与 RC6 版本比较,该版本改进包括:* 修复了无磁盘的复制问题 (Oran Agra)* 在角色变化后对 BLPOP 复制进行测试 (Salvatore Sanfilippo)* prepareClientToWrite() 错误处理方法的改进 (Salvatore Sanfilippo)* 移除 dict.c 中不再使用的函数(Salv原创 2015-04-02 09:30:09 · 1105 阅读 · 1 评论 -
Sentinel-Redis命令参考
本文档翻译自: http://redis.io/topics/sentinel 。Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance),该系统执行以下三个任务:监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。提醒(Notification):当被监控的某个 Redis 服务器出现问题时翻译 2015-05-15 14:06:10 · 2079 阅读 · 0 评论 -
Redis研究(十)—Redis事务和生存时间
一、事务概述Redis事务是一组命令的集合。事务同命令一样是Redis的最小执行单位,要么执行,要么不执行。事务的原理是先将属于一个事务的命令发送给Redis,然后在让Redis依次执行这些命令。Redis在事务中没有立即执行sadd操作,而是返回QUEUED表示这两条命令已经进入等待执行的事务队列中了。使用EXEC命令告诉Redis将等待执行的事务队列中的所有命令按照发送顺序原创 2015-01-18 16:42:10 · 4203 阅读 · 1 评论 -
Redis中sentinel集群的搭建和Jedis测试 图文教程[二]
在Redis中sentinel集群的搭建和Jedis测试 图文教程[一] 中已经写了Redis中sentinel集群的搭建和测试,这一章主要写Redis中sentinel的Jedis测试。一般sentinel架构图为至少4台机子测试 我这里测试的时候只用两台机子,一台跑Redis-Sentinel和所有的Redis master-slave,一台跑java测试程序。xserver.ini为项目工程原创 2015-06-16 15:01:03 · 3478 阅读 · 2 评论 -
Redis中sentinel集群的搭建和Jedis测试 图文教程[一]
一、测试环境master: 127.0.0.1 6379slave1: 127.0.0.1 6479slave2: 127.0.0.1 6579master-sentinel: 127.0.0.1 26379slave1-sentinel: 127.0.0.1 26479slave2-sentinel: 127.0.0.1 26579二、下载安装redis 2.8.3wg原创 2015-06-16 14:03:22 · 5589 阅读 · 4 评论 -
Redis Sentinel机制与用法[转]
Redis Sentinel 机制与用法(一)概述Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动原创 2015-06-20 20:45:40 · 1402 阅读 · 0 评论 -
NoSQL类型、适用场景及使用公司
在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,比如SQL Server、Oracle或者是MySQL。甚至是做一些默认的选择,比如使用.NET的一般会选择SQL Server;使用Java的可能会偏向Oracle,Ruby是MySQL,Python则是PostgreSQL或MySQL等等。原因很简单:过去很长一段时间内,关系数据库的健壮性已经在多原创 2015-06-25 22:45:19 · 837 阅读 · 0 评论 -
深入理解Redis数据淘汰策略
在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。 redis中当内存超过限制时,按照配置的策略,淘汰掉相应的kv,使得内存可以继续留有足够的空间保存新的数据。redis 确定驱逐某个原创 2015-06-06 17:27:11 · 6839 阅读 · 0 评论 -
Redis 存储图片 [base64/url/path]vs[object]
一、base64图片编解码 基本流程:从网络获取下载一张图片,然后base64编码,再base64解码,存到本地E盘根目录下。 import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;原创 2015-06-29 10:36:31 · 26661 阅读 · 1 评论 -
Java WebService 实现读写Redis数据库
一、准备工作1、MyEclipse102、JDK 1.7.03、apache-tomcat-6.0.13二、创建服务端1、创建【Web Service Project】,命名为【TheService】。2、创建【Class】类,命名为【ServiceHello】,位于【com.wty.service】包下。3、编写供客户端调用的方法,原创 2015-05-24 18:48:14 · 2561 阅读 · 0 评论 -
Redis中sentinel集群的搭建和Jedis测试 图文教程[三]
在前两篇Redis中sentinel集群的搭建和Jedis测试 图文教程[一] 和Redis中sentinel集群的搭建和Jedis测试 图文教程[二] 中分别简述了Redis中sentinel集群的搭建和Java代码的Jedis测试。 这篇主要来简单分析一下Redis-sentinel集群的原理,根据追踪sentinel信息来完成Redis-sentinel集群测试中的详细的原理分析原创 2015-06-20 16:30:50 · 2957 阅读 · 2 评论 -
Redis研究(十三)—安全和通信协议
一、安全 Redis的作者Salvatore Sanfilippo曾经发表过Redis宣言,其中提到Redis以简洁为美。同样在安全层面Redis也没有做太多的工作。1、可信的环境 Redis的安全设计是在“Redis运行在可信环境”这个前提下做出的,在生产环境运行时不能允许外界直接连接到Redis服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证R原创 2015-01-24 20:37:01 · 4004 阅读 · 1 评论 -
Redis研究(十六)—发布/订阅模式
在上一篇中我们写了Redis的任务队列。 除了实现任务队列外,Redis还提供了一组命令可以让开发者实现“发布/订阅”(publish/subscribe)模式。“发布/订阅”模式同样可以实现进程间的消息传递,其原理是这样的: “发布/订阅”模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发原创 2015-01-25 11:21:32 · 3281 阅读 · 1 评论 -
Redis研究(十四)—管理工具
工欲善其事,必先利其器。在使用Redis的时候如果能够有效利用Redis的各种管理工具,将会大大方便开发和管理。一、 redis-cli 相信大家对redis-cli已经很熟悉了,作为Redis自带的命令行客户端,你可以从任何安装有Redis的服务器中找到它,所以对于管理Redis而言redis-cli是最简单实用的工具。redis-cli可以执行大部分的Redis命原创 2015-01-24 22:28:44 · 4231 阅读 · 2 评论 -
Redis命令及对应jedis操作(String)
redis全称是:REMOTE DICTIONARY SERVER,远程字典服务,它是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。因为是内存读取,redis每秒可以读取数十万的健值数据。转载 2014-11-10 14:07:45 · 2465 阅读 · 1 评论 -
Redis研究(四)—散列类型
散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型。散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多2^32-1个字段。一、介绍散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。如果要关系数据中存储汽车对象:数据是以二维表的形式原创 2014-12-16 20:52:27 · 3303 阅读 · 0 评论 -
Redis研究(五)—列表类型
一、介绍列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或者获取列表的一个片段。列表类型内部是使用双向链表实现的, 所以向列表两端添加元素的时间复杂度为O(1).获取越接近两端的元素速度越快。所以不管原来有多少数据(无关),获取头部或者尾部的10条记录也是很快的。不过使用链表的代价是通过索引访问元素比较慢。列表类型适合用来原创 2014-12-16 21:56:06 · 2512 阅读 · 0 评论 -
Redis研究(十九)—命令属性
Redis的不同命令拥有不同的属性,如是否是只读命令,是否是管理员命令等,一个命令可以拥有多个属性。在一些特殊情况下不同属性的命令会有不同的表现,下面来逐一介绍。1、 REDIS_CMD_WRITE 拥有REDIS_CMD_WRITE属性的命令的表现是会修改Redis数据库的数据。一个只读的从数据库会拒绝执行拥有REDIS_CMD_WRI TE属性的命令,另外在Lua脚本原创 2015-01-27 13:16:09 · 5510 阅读 · 1 评论 -
Redis 事务
Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency), 隔离性(Isolation), 持久性(Durability),简称ACID。我们逐项考察下 Redis 在事务的 ACID 上做出的权衡与取舍:原子性(Atomicity)原子意味着操作的不可再分,要么执行要么不执行转载 2015-01-15 11:54:55 · 1019 阅读 · 0 评论 -
Redis研究(一)—简介
Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。1.1历史和发展2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL的低性能,亲自定做一个数据库,并于2009年开发完成,这个就是Redis。短短几年,用户数据量猛增。国内原创 2014-12-10 23:07:46 · 3165 阅读 · 1 评论 -
Redis研究(二)—准备
一.安装Redis安装Redis请看这里:http://blog.csdn.net/wtyvhreal/article/details/40980167二.启动和停止RedisRedis可执行文件说明:redis-server Redis服务器redis-cli Redis命令行客户端redis-原创 2014-12-11 15:23:15 · 3063 阅读 · 3 评论 -
Redis研究(六)—集合类型
一、介绍一个集合类型(set)键可以存储至多2^32-1个字符串。集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以操作的复杂度为O(1)。多个集合类型键之间还可以进行并集、交集和差集运算。二、命令1.增加/删除元素sadd key membersrem key membersadd用来向集合中增加一个或者多个元素,如果键不存原创 2015-01-15 21:10:40 · 2509 阅读 · 0 评论 -
Redis研究(七)—如何判断set/get是否为原子操作
在做项目过程中,多个客户端可能同时读写Redis数据库,set和get命令是否为原子操作,关系到命令是否需要加锁机制的必要性。网上资料或者看书都说set和get等Redis命令为原子操作,但是程序里怎么测试呢?试想开1000个写线程,1000个读线程同时操作Redis中的一个值,假如set和get不是原子的,那么当set的时候,把原来数据涂掉,还没来得及写进去,get操作已经执行,这个原创 2015-01-15 22:32:44 · 26407 阅读 · 4 评论 -
浅析Redis实现lock互斥访问资源
Redis是当前很流行的一种开源键值数据库。目前睿思的后台架构在数据库层采用了Redis和MySQL组合的形式,其中Redis主要用来存储状态信息(比如当前种子的peer)和读写频繁的数据。Redis完全运行在内存之上,无lock设计,速度非常快!通过实测,在睿思服务器上读写速度达到3万次/s。 在高并发的应用中,很多时候我们需要对某些资源进行竞争访问,比如在很多人下原创 2014-12-28 13:50:52 · 4458 阅读 · 4 评论 -
Redis研究(八)—有序集合类型 1
一、介绍sorted set为集合中的每个元素都关联了一个分数,所以可以获得分数最高或者最低的前N个元素,获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是他们的分数却可以相同。有序集合类型与列表类型有些相似(1)二者都是有序的(2)二者都可以获得某一个范围的元素。但是二者有很大的区别(1)列表通过链表实现,获取两端数据速度快,访问中间数原创 2015-01-17 13:26:56 · 3157 阅读 · 1 评论 -
Redis研究(九)—有序集合类型 2
上一篇已经讲了一部分有序集合类型的命令了http://blog.csdn.net/wtyvhreal/article/details/42804571三、命令拾遗1.获得集合中元素的数量zcard key2.获得指定分数范围内的元素个数zcount key min max3.删除一个或者多个元素zrem key member返回值是成功删除的元素原创 2015-01-17 13:30:26 · 2522 阅读 · 1 评论 -
Redis研究—传送门
LZ在做开源呼叫中心项目FreeLink中时,坐席话机统计量的计算与维护用到了Redis的知识,索性就把Redis学习了一点。下面是对LZ博客中Redis研究的整理,欢迎查漏补缺,互相学习。1、Redis技术的简介:基于内存存储数据,高性能键值对数据库的Redis技术的历史发展与特征。http://blog.csdn.net/wtyvhreal/article/details/41原创 2015-02-06 11:21:11 · 16864 阅读 · 0 评论 -
Redis研究(三)—字符串类型
在介绍Redis字符串类型之前,先来了解几个比较基础的命令作为热身。1.获得符合规则的键名列表keys patternpattern支持glob风格通配符格式,具体规则如下:?匹配一个字符*匹配任意个(包括0个)字符[]匹配括号间的任一字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配“ab”,“ac”,“ad”原创 2014-12-12 20:38:50 · 3396 阅读 · 1 评论 -
Redis研究(十一)—数据持久化
一、 持久化 Redis的强劲性能很大程度上是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。1. RDB方式 RDB方式的持久化是通原创 2015-01-20 12:58:11 · 2808 阅读 · 1 评论 -
Redis主从复制架构初步探索
目录一、主从复制架构简介1.1 源于关系数据库的读写分离1.2 基于MySQL的数据复制流程二、在单机上模拟主从复制架构实践2.1 拷贝两个服务到指定磁盘文件夹2.2 分别修改Master和Slave的配置文件2.3 分别启动Master和Slave的服务2.4 在命令行中进行简单数据读写测试2.5 在程序中进行简单数据读写测试三、回头再看Redis主从复制模型3.1 Redis的两种存储转载 2015-01-20 13:27:42 · 1429 阅读 · 2 评论 -
Redis研究(十二)—主从复制
在上一节中我们写了Redis的数据持久化http://blog.csdn.net/wtyvhreal/article/details/42916503 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失。为了避免单点故障,我们希望将数据库复制多个副本以部署在原创 2015-01-21 21:25:43 · 3628 阅读 · 1 评论 -
Redis学习资料汇总
1.Redis是什么?· 十五分钟介绍 Redis数据结构· Redis系统性介绍· 一个很棒的Redis介绍PPT· 强烈推荐!非同一般的Redis介绍· Redis之七种武器· 锋利的Redis· redis适用场景与实现2.Redis内部实现·原创 2015-12-29 16:39:46 · 2340 阅读 · 0 评论