Redis数据库的使用场景介绍(避免误用Redis)

Redis数据库的使用场景介绍(避免误用Redis)
Redis数据库的使用场景介绍(避免误用Redis)

Redis 是目前NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧、锋利、实用,特别适合解决一些使用传统关系数据库难以解决的问题。但是Redis 不是银弹,有很多适合它解决的问题,但是也有很多并不适合它解决的问题。另外,Redis 作为内存数据库,如果用在不适合的场合,对内存的消耗是很可观的,甚至会让系统难以承受。

我们可以对系统存储使用的数据以两种角度分类,一种是按数据的大小划分,分成大数据和小数据,另一种是按数据的冷热程度划分,分成冷数据和热数据,热数据是指读或写比较频繁的数据,反之则是冷数据。

可以举一些具体的例子来说明数据的大小和冷热属性。比如网站总的注册用户数,这明显是一个小而热的数据,小是因为这个数据只有一个值,热是因为注册用户数随时间变化很频繁。再比如,用户最新访问时间数据,这是一个量比较大,冷热不均的数据,大是数据的粒度是用户级别,每一个用户都有数据,如果有一千万用户,就意味着有一千万的数据,冷热不均是因为活跃用户的最新访问时间变化很频繁,但是可能有很大一部非活跃用户访问时间长时间不会发生变化。

大体而言,Redis 最适合处理的是小而热,而且是写频繁,或者读写都比较频繁的热数据。对于大而热的数据,如果其它方式很难解决问题,也可以考虑使用Redis 解决,但是一定要非常谨慎,防止数据无限膨胀。原因如下:

首先,对于冷数据,无论大小,都不建议放在Redis 中。Redis 数据要全部放在内存中,资源宝贵,把冷数据放在其中实在是一种浪费,冷数据放在普通的存储比如关系数据库中就好了。

其次,对于热数据,尤其是写频繁的热数据,如果量比较小,是最适合放到Redis 中的。比如上面提到的网站总的注册用户数,就是典型的Redis 用做计数器的例子。再比如论坛最新发表列表,最新报名列表,可以控制数量在几百到一千的规模,也是典型的redis 做最新列表的使用方式。

另外,对于量比较大的热数据(或者冷热不均数据),使用Redis 时一定要比较谨慎。这种类型数据很容易引起数据膨胀,导致Redis 消耗内存巨大,让系统难以承受。薄荷的一个惨痛教训是把用户关注(以及被关注)数据放在Redis 中,这是一种数据量极大,冷热很不均衡的数据,在几百万的用户级别就占用了近10 GB左右内存,让Redis 变得难以应付。应对这种类型的数据,可以用普通存储+ 缓存的方式。

如果用对了地方,比如在小而热的数据情形,Redis 表现很棒,如果用错了地方,Redis 也会带来昂贵的代价,所以使用时务必谨慎。

更多信息请查看IT技术专栏

redis中文手册

Skip to comments (0) 排头兵 Evangelist PHP / Blogger Live in Shanghai Work@https://www.360docs.net/doc/d213047597.html, Email@shjuto(at)https://www.360docs.net/doc/d213047597.html, More 国内的开放平台就是一个玩笑 分享会-高性能nosql数据库redis 盛大在线跨站攻击分享会 Bambook 知识和文化传承的载体 加入盛大在线 efish 在 国内的开放平台就是一个玩笑 上的评论 最弱网 在 加入盛大在线 上的评论 大大的小蜗牛 在 国内的开放平台就是一个玩笑 上的评论 youstar 在 国内的开放平台就是一个玩笑 上的评论 wss8848 在 国内的开放平台就是一个玩笑 上的评论 CSS FreeBSD jquery memcached MySQL nginx NOSQL PHP SEO技术 SEO新闻 人在江湖 团队管理 我看互联网 碎言碎语 网站设计 最近文章 最近评论 分类目录

我看互联网 碎言碎语 网站设计 网站运营 网络营销 文章索引模板2010年十一月 2010年九月 2010年八月 2010年七月 2010年六月 2010年五月 2010年三月 2010年二月 2010年一月 2009年十二月 2009年六月 2009年五月 2009年四月 2009年三月 2009年一月 2008年十二月 2008年十一月 2008年十月 2008年九月 2008年八月 2008年七月 2008年六月 2008年五月 2008年四月 2008年三月 2007年九月 2007年八月 2007年四月 2006年七月 链接 Jackzou omiga PHPPAN Reco Lee Show Framework suppermen Tino Web开发 一亩三分地 五四陈科学院 伊人莫公 哥学社 恋上E人 某人的栖息地 武林 精神鸦片

Redis在大数据中的使用技巧

Redis在大数据中的使用技巧 今天将会跟大家讨论一些Redis在大数据中的使用,包括一些Redis的使用技巧和其他的一些内容。 一、Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。 这里可以打开看一下,NewLife.Core里面有一个NewLife.Caching的命名空间,里面有一个Redis类,里面实现了Redis的基本功能;另一个类是RedisClient是Redis的客户端。 Redis的核心功能就是有这两个类实现,RedisClient代表着Redis客户端对服务器的一个连接。Redis真正使用的时候有一个Redis连接池,里面存放着很多个RedisClient对象。 所以我们Redis的封装有两层,一层是NewLife.Core里面的Redis以及RedisClient;另一层就是NewLife.Redis。这里面的FullRedis是对Redis的实现了Redis的所有的高级功能。 这里你也可以认为NewLife.Redis是Redis的一个扩展。 二、Test实例讲解Redis的基本使用 1、实例 这里https://www.360docs.net/doc/d213047597.html,eConsole();是向控制台输出日志,方便调试使用查看结果。 接下来看第一个例子Test1,具体的我都在代码中进行了注释 Set的时候,如果是字符串或者字符数据的话,Redis会直接保存起来(字符串内部机制也是保存二进制),如果是其他类型,会默认进行json序列化然后再保存起来。

Get的时候,如果是字符串或者字符数据会直接获取,如果是其他类型会进行json反序列化。 Set第三个参数过期时间单位是秒。 vs调试小技巧,按F5或者直接工具栏“启动”会编译整个解决方案会很慢(VS默认),可以选中项目然后右键菜单选择调试->启动新实例,会只编译将会用到的项目,这样对调试来说会快很多。 大家运行调试后可以看到控制台输出的内容:向右的箭头=》是ic.Log=XTrace.Log 输出的日志。 字典的使用:对象的话,需要把json全部取出来,然后转换成对象,而字典的话,就可以直接取某个字段。 队列是List结构实现的,上游数据太多,下游处理不过来的时候,就可以使用这个队列。上游的数据发到队列,然后下游慢慢的消费。另一个应用,跨语言的协同工作,比方说其他语言实现的程序往队列里面塞数据,然后另一种语言来进行消费处理。这种方式类似MQ的概念,虽然有点low,但是也很好用。 集合,用的比较多的是用在一个需要精确判断的去重功能。像我们每天有三千万订单,这三千万订单可以有重复。这时候我想统计下一共有订单,这时候直接数据库group by是不大可能的,因为数据库中分了十几张表,这里分享个实战经验: 比方说揽收,商家发货了,网点要把件收回来,但是收回来之前网点不知道自己有多少货,这时候我们做了一个功能,也就是订单会发送到我们公司来。我们会建一个time_site 的key的集合,而且集合本身有去重的功能,而且我们可以很方便的通过set.Count功能来统计数量,当件被揽收以后,我们后台把这个件从集合中Remove掉。然后这个Set中

redis千万级数据性能测试

Redis千万级的数据量的性能测试 发布时间:2011-04-06 16:21:31 来源:未知评论:点击:1609 次【字号:】 从图中可以猜测到还会有Redis 2.2.1 的测试,相同的测试环境,1K的数据量,使用ServiceStack.Redis 客户端进行如下测试:1) Set操作2) Get操作3) Del操作每一套测试分别使用三个配置进行测试:1) 绿色线条的是开启Dump方式的持久化,5分钟持久化一次2) 从图中可以猜测到还会有Redis 2.2.1 的测试,相同的测试环境,1K的数据量,使用ServiceStack.Redis客户端进行如下测试: 1) Set操作 2) Get操作 3) Del操作 每一套测试分别使用三个配置进行测试: 1) 绿色线条的是开启Dump方式的持久化,5分钟持久化一次 2) 蓝色线条是开启AOF方式的持久化,每秒写入磁盘一次 3) 红色线条是关闭任何的持久化方式 对于每一个配置都使用相同的其他配置: 1) 开启VM 最大内存10GB(128字节一页)之后开始换出,VM空间160GB 2) 最大使用内存15GB,确保在Dump的时候有足够的剩余内存 3) 开启压缩,没有配置主从 现在来看一下测试结果: 从这个图中可以看出: 1) 对于没有持久化的方式,读写都在数据量达到800万的时候,性能下降几倍,此时正好是达到内存10G,Redis开始换出到磁盘的时候。并且从那以后再也没办法重新振作起来,性能比Mongodb还要差很多。

2) 对于AOF持久化的方式,总体性能并不会比不带持久化方式差太多,都是在到了千万数据量,内存占满之后读的性能只有几百。 3) 对于Dump持久化方式,读写性能波动都比较大,可能在那段时候正在Dump也有关系,并且在达到了1400万数据量之后,读写性能贴底了。在Dump的时候,不会进行换出,而且所有修改的数据还是创建的新页,内存占用比平时高不少,超过了15GB。而且Dump还会压缩,占用了大量的CPU。也就是说,在那个时候内存、磁盘和CPU的压力都接近极限,性能不差才怪。 总结一下: 1) Redis其实只适合作为缓存,而不是数据库或是存储。它的持久化方式适用于救救急啥的,不太适合当作一个普通功能来用。对于这个版本的Redis,不建议使用任何的持久化方式。否则到时候可能会死的比较难看。说白了,期望Redis是memcached的升级版,带有各种数据结构,但是不要期望Redis来和Mongodb/Kt等来比。 2) 对于VM其实也是不建议开启,虽然开启VM可以让Redis保存比内存更多的数据,但是如果冷热数据不是很明显的话性能会非常差(我的测试都是随机查询Key,冷热不明显)。当然,对于冷热明显的情况下可以设置200% - 400%的内存作为VM空间,也不建议设置10倍的内存空间作为VM(像我的配置一样)。 3) ServiceStack.Redis客户端好像有几个Bug,首先RedisTypedClient的Dispose居然没有实现,应该是要调用client.Dispose(),其次RedisNativeClient的Info属性不是每次都获取最新值的,第三PooledRedisClientManager的WritePoolIndex和ReadPoolIndex 只看到加没看到减的地方,也不知道这是干啥的,其实每次都取第一个不是Active的Client 就可以了,PooledRedisClientManager也没有把超时使用的Active的Client强制回收(避免使用的时候忘记Dispose占用过多的连接)。有关这几点,我会尝试联系ServiceStack.Redis 的作者。

Redis的5个常见使用场景

Redis的5个常见使用场景概括 大家平时在使用Redis的时候有没有总结过Redis常用于哪些场景呢。下面科多老师带着大家一起来总结一下,希望能够帮助到各位同学。 1、会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis 来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。 2、全页缓存(FPC) 除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性 问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。 再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。 此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。 3、队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis 能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这 里去查看。 4、排行榜/计数器 Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set) 和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES

Redis数据库安装使用说明

Redis数据库安装使用说明 Redis数据库安装使用说明 Windows 安装说明 下载 文件 配置 启动 CentOS 安装说明 下载 安装 配置 启动 关闭 redis-py 检测 安装 说明 官方网站 Windows 安装说明 Windows下启动请使用Administrator账户 下载

请点击这里选择需要下载的版本 Windows版本只是为了开发使用,正式环境请选择在Linux下安装使用文件 程序说明 redis-benchmark.exe Redis性能测试工具 redis-check-aof.exe数据修复 redis-check-dump.exe检查导出工具 redis-cli.exe Redis客户端 redis-server.exe Redis服务器 redis.windows.conf配置文件 配置 配置文件为 redis.windows.conf 主要修改以下几个参数: 内网运行,建议不设置认证密码 port6379#端口,默认为6379 logfile"redis.log"#日志文件

dbfilename dump.rdb #数据库文件 maxheap1024000000#修改为该值即可 dir ./ #路径(当前目录下) 启动 进入控制台,并跳转到reids-server.exe目录下,输入以下命令即可: redis-server redis.windows.conf 设置快捷启动 在redis程序文件夹下创建StartRedisDB.bat文件,并写入如下内容 redis-server redis.windows.conf pause 保存即可,下次可以直接点击运行Redis服务端 CentOS 安装说明 如果安装使用过,请使用你自己的方法;如果没有安装使用过,请根据我的步骤安装

Redis中统计各种数据大小的方法

如果MySQL 数据库比较大的话,我们很容易就能查出是哪些表占用的空间;不过如果Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间了。 有一些工具能够提供必要的帮助,比如redis-rdb-tools 可以直接分析RDB 文件来生成报告,可惜它不能百分百实现我的需求,而我也不想在它的基础上二次开发。实际上开发一个专用工具非常简单,利用SCAN 和DEBUG 等命令,没多少行代码就能实现:代码如下: <?php $patterns = array( 'foo:.+', 'bar:.+', '.+', ); $redis = new Redis(); $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $result = array_fill_keys($patterns, 0); while ($keys = $redis->scan($it, $match = '* } } } } var_dump($result); ?> 当然,前提是你需要提前总结出可能的键模式,简单但不严谨的方法是MONITOR:代码如下: shell> /path/to/redis-cli monitor | awk -F '"' '$2 ~ "ADD|SET|STORE|PUSH" {print $4}' 此外,需要注意的是:因为DEBUG 返回的serializedlength 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。 更多信息请查看IT技术专栏

Redis数据库简介

介绍 Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询, bitmaps, hyperloglogs 和地理空间(geospatial)索引半径查询。 Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。 版本 官方版本 目前官方版本支持Linux系统和Ubuntu系统。官方下载地址: http://redis.io/download 由于我们的开发项目以Windows为主,所以在此不对官方版本做详细介绍,有兴趣的可以到官网查看。 #### 非官方版本(Windows 版本)官方没有Redis的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)自行开发和维护了一个Win64的版本。 - 微软团队只提供了官方64位版本,而32位版本,需要自己从源代码构建。 - Released版本中提供了msi文件,Redis可以作为Windows服务安装 安装服务 ?下载Win64的压缩文件到一个指定文件夹 ?打开一个 cmd 窗口使用cd命令切换目录到解压缩的文件夹下运行redis-server.exe redis.windows.conf ?redis-server.exe启动Redis服务 ?redis.windows.conf Redis服务的一些配置,不写则会调用默认设置 ?端口号默认6379可以通过修改配置文件redis.windows-service.conf修改或CONFIG set命令修改 运行客户端 ?打开一个 cmd 窗口使用cd命令切换目录到解压缩的文件夹运行redis-cli.exe -h 127.0.0.1 -p 6379 ?redis-cli.exe启动Redis客户端 ?-h 127.0.0.1服务器IP地址 ?-p 6379服务器端口号

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

redis系列三-springboot如何使用redis做缓存及缓存注解的 用法总结 1. 概述 本文介绍spring boot 如何使用Redis做缓存,如何对redis 缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。 2. spring boot集成redis 2.1. application.properties 配置application.properties,包含如下信息: 指定缓存的类型 配置redis的服务器信息 请不要配置spring.cache.cache-names值,原因后面再说 ## 缓存 # spring.cache.cache-names=book1,book2 spring.cache.type=REDIS # REDIS (RedisProperties)

spring.redis.database=0 spring.redis.host=192.168.188.7 spring.redis.password= spring.redis.port=6379 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=100 spring.redis.pool.max-wait=-1123456789101112131234567891 0111213 2.2. 配置启动类 @EnableCaching: 启动缓存 重新配置RedisCacheManager,使用新的配置的值 @SpringBootApplication @EnableCaching // 启动缓存 public class CacheApplication { private static final Logger log = LoggerFactory.getLogger(CacheApplication.class); public static void main(String[] args) { https://www.360docs.net/doc/d213047597.html,("Start CacheApplication.. ");

分析Redis架构设计

redis启动流程 1.初始化server变量,设置redis相关的默认值 2.读入配置文件,同时接收命令行中传入的参数,替换服务器设置的默认值 3.初始化服务器功能模块。在这一步初始化了包括进程信号处理、客户端链表、共享对象、初始化数据、初始化网络连接等 4.从RDB或AOF重载数据 5.网络监听服务启动前的准备工作 6.开启事件监听,开始接受客户端的请求 启动的部分过程通过查看下图,会更直观。 下面是针对启动过程中,对各个模块的详细理解。(目前只分析了后台线程系统与慢查询

日志系统) 三、Redis数据持久化方案 在使用redis时不少人都说一个问题,就是说redis宕机了怎么办?会不会数据丢失等等的问题。 现在来看看Redis提供的数据持久化解决方案,并通过原理分析优缺点。最终能得出Redis适合使用的应用场景。 1.RDB持久化方案 在Redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中,当Redis需要重启时,RDB程序会通过重载RDB文件来还原数据库。 从上述描述可以看出,RDB主要包括两个功能: 关于rdb的实现可以见src/rdb.c a)保存(rdbSave) rdbSave负责将内存中的数据库数据以RDB格式保存到磁盘中,如果RDB文件已经存在将会替换已有的RDB文件。保存RDB文件期间会阻塞主进程,这段时间期间将不能处理新的客户端请求,直到保存完成为止。 为避免主进程阻塞,Redis提供了rdbSaveBackground函数。在新建的子进程中调用rdbSave,保存完成后会向主进程发送信号,同时主进程可以继续处理新的客户端请求。

redis在JAVA中使用

Redis 一、Redis介绍 什么是Redis? redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash (哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 它有什么特点? (1)Redis数据库完全在内存中,使用磁盘仅用于持久性。 (2)相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。 (3)Redis可以将数据复制到任意数量的从服务器。 Redis 优势? (1)异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。(2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。 (3)操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

(4)多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。 Redis 缺点? (1)单线程 (2)耗内存 二、使用实例 spring把专门的数据操作独立封装在spring-data系列中,spring-data-redis自然是针对Redis的独立封装了。 主要是将jedis、jredis、rjc以及srp等Redis Client进行了封装,同时支持事务。 1、引入相关jar包(连接池不做考虑) 1. 2. 3.org.springframework.data 4.spring-data-redis 5.1. 6.1.RELEASE 6. 7. 8.redis.clients 9.jedis 10.2.7.3 11. 12. 2、配置bean

Spring-data-redis使用手册

Spring-data-redis使用手册

文档信息(Document Info) 标题(Title) Spring-data-redis使用手册 文档编号(No) 2012-02-14 作者(Author) 黄承开 最后发布时间(Last Update) 2012-08-10 概述(Summarize) 掌握spring-data-redis的使用方法,一些最佳实践

修订信息(Revise Info) 修订日期(Date)修订人(Reviser) 修订内容(Revises) 2012-05-21 梁国锋 2.2 redis下载地址(Linux版、Windows版) 3.4.6常用api的方法 5.1mercury项目实战 2012-06-25 黄承开新增maven依赖配置方法,整理了章节2012-06-26 黄承开新增章节 2012-08-10 张瑜新增Tinybee实战配置,增加KEY序列化配置

附件信息(Attachment Info)

目录 文档信息(Document Info) (2) 修订信息(Revise Info) (3) 附件信息(Attachment Info) (4) 1.概述 (6) 1.1.目的 (6) 1.2.范围 (6) 2.准备 (6) 2.1.环境配置 (6) 2.2.下载地址 (7) 3.Spring-data-redis (7) 3.1.背景 (7) 3.1.1.高级API (7) 3.1.2.低级API (7) 3.2.Maven配置 (7) 3.3.JedisConnectionFactory (8) 3.4.RedisTemplate和StringRedisTemplate (8) 3.5.API概览 (8) 3.5.1.Java集合和Redis集合 (8) 3.5.2.Operations (9) 3.5.3.ValueOperations和BoundValueOperations (9) 3.5.4.ListOperations和BoundListOperations (9) 3.5.5.SetOperations和BoundSetOperations (10) 3.5.6.ZSetOperations和BoundZSetOperations (11) 3.5.7.HashOperations和BoundHashOperations (11) 3.5.8.其他 (12) 3.6.Callback (12) 3.7.Topic和Messaging/PubSub (12) 3.8.Cache (12) 4.NoSQL数据库设计 (12) 4.1.一般经验 (12) 4.1.1.不持久化业务实体 (12) 4.1.2.Key的设计 (12) 4.2.官方例子中的设计 (13) 4.3.NoSQL 数据建模技术 (13) 5.最佳实践 (13) 5.1.项目案例1(Mercury项目) (13) 5.1.1.配置 (13) 5.1.2.总结 (14) 5.2.项目案例2(Tinybee项目) (14) 5.2.1.配置(更新) (14)

Redis 使用的常见误区(案例分析)

Redis 使用的常见误区(案例分析) 在一个炎热的夏天,引爆了埋藏已久的大炸弹。本文作者从实际案例出发讲解Redis 使用的误区。 案例一:一个产品线开发人员搭建起了一套庞大的价格存储系统,底层是关系型数据库,只用来处理一些事务性的操作和存放一些基础数据。 在关系型数据库的上面还有一套MongoDB,因为MongoDB 的文档型数据结构,让他们用起来很顺手,同时也可以支撑一定量的并发。 在大部分的情况下,一次大数据量的计算后结果可以重用但会出现细节数据的频繁更新,所以他们又在MongoDB 上搭建了一层Redis 的缓存。 这样就形成了数据库MongoDBRedis三级的方式,方案本身先不评价不是本文重点,我们来看Redis 这层的情况。 由于数据量巨大,所以需要200GB 的Redis,并且在真实的调用过程中,Redis 是请求量最大的点。 当然如果Redis 有故障时,也会有备用方案,从后面的MongoDB 和数据库中重新加载数据到Redis,就是这么一套简单的方案上线了。 当这个系统刚开始运行的时候,一切都还安好,只是运维同学有点傻眼了,200GB 的Redis 单服务器去做,它的故障可能性太大了。 所以大家建议将它分片,没分不知道,一分吓一跳,各种类型用的太多了,特别是里面还有一些类似消息队列使用的场景。 由于开发同学对Redis 使用的注意点关注不够,一味的滥用,一锤了事,所以让事情变的困难了。 有些侥幸不死的想法是会传染,这时的每个人都心存侥幸,懒惰心理,都想着:这个应该没事,以后再说吧,先做个主从,挂了就起从,这种侥幸也是对Redis 的虚伪的信心,无知者无畏。 可惜事情往往就是怕什么来什么,在大家快乐的放肆使用时,系统中重要的节点

云数据库Redis版

云数据库 Redis 版 用户指南

用户指南 使用购买 Redis 的账号登录 Redis 管理控制台。进入 Redis 实例列表界面,如下图所示。 管理实例 修改密码 如果您忘记密码、需要修改旧密码,或者在创建实例时没有设置密码,您可以重新设置实例的密码。 登录 Redis 管理控制台。 定位到目标实例,点击实例ID或者管理进入实例信息页面。 在修改密码窗口,输入旧密码和新密码,点击确认。 注意:如果您忘记密码,在修改密码窗口点击忘记旧密码的链接,可以在重置密码的窗口设置新密码。 云数据库 Redis 版支持按量付费模式,按量付费可以可执行变配操作。详细步骤请参考变配流程。 阿里云数据库支持经典网络和专有网络两种网络类型。本章介绍两种网络类型的区别及设置方法。 背景信息 在阿里云平台上,经典网络和专有网络的区别如下:

1.2.经典网络:经典网络中的云服务在网络上不进行隔离,只能依靠云服务自身的安全组或白名单策略来阻挡非法访问。 专有网络(Virtual Private Cloud,简称 VPC):专有网络帮助用户在阿里云上构建出一个隔离的网络环境。用户可以自定义专有网络里面的路由表、IP 地址范围和网关。此外用户可以通过专线或者VPN 的方式将自建机房与阿里云专有网络内的云资源组合成一个虚拟机房,实现应用平滑上云。 注意:经典网络可以转换为专有网络,专有网络不支持更换为经典网络。 Redis 默认使用经典网络,如果您要使用专有网络(VPC),Redis 和 VPC 必须在同一地域,有以下两种方式: 如果 Redis 还没有创建,您可以先建立 VPC,然后在 VPC 下创建 Redis,具体请参见下文 新建Redis场景。 如果 Redis 已经创建,您可以在 Redis 同一地域创建 VPC,然后将 Redis 加入 VPC,具体请参见下文 已有 Redis场景。 新建 Redis 场景 创建 VPC, 具体请参见 VPC 快速入门。创建与 VPC 所在地域一致的 Redis 实例。 在购买过程中,网络类型选择专有网络,选择对应的 VPC 即可。参见 创建实例 章节。 已有 Redis 场景 创建与 Redis实例所在地域一致的 VPC,具体请参见 VPC快速入门。 登录 Redis 管理控制台,选择目标实例,单击管理。 在实例信息页面,单击切换为专有网络。 在切换为专有网络页面中选择 VPC 和 虚拟交换机,单击确定,如下图所示。

redis的使用规范(内部公开)

翼支付Redis使用规范(内部公 开) 说明书 编写:魏巍 评审:夏琨 批准:夏琨 日期:2015-03-27

文档信息及修改历史

目录 Redis使用规范(内部公开) (1) 1引言 (4) 1.1编写目的 (4) 1.2编写原则 (4) 1.3读者对象 (4) 1.4文档贡献 (4) 1.5术语定义 (4) 1.5.1名词释义 (4) 2典型使用 (5) 2.1Session集群解决方案 (5) 2.1.1集群配置(不同场景的机器配置会不一样) (5) 2.1.2引入Git项目 (5) 2.1.3web.xml说明 (6) 2.1.4配置文件说明 (8) 2.2单表数据缓存方案........................................................................... 错误!未定义书签。 2.3大量数据查询解决方案................................................................... 错误!未定义书签。3上线规则 (9) 3.1命名 (9) 3.2消息大小限制 (9) 3.3消息量的控制 (9) 3.4消息量预估 (9) 3.5扩容 (10)

1引言 1.1编写目的 本文档制定使用Redis规范和使用要求,制定规范命名和流程化的使用规则,从而降低后期维护、

2典型使用 2.1Session集群解决方案 用户登陆时的session可保存到redis集群中,应用程序重启,session依然存在,无需再次登陆。

Redis开发常用规范

Redis开发常用规范 1.冷热数据分离,不要将所有数据全部都放到Redis中 虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵。建议根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数据可以使用 MySQL/ElasticSearch/MongoDB等基于磁盘的存储方式,不仅节省内存成本,而且数据量小在操作时速度更快、效率更高! 2.不同的业务数据要分开存储 不要将不相关的业务数据都放到一个Redis实例中,建议新业务申请新的单独实例。因为Redis为单线程处理,独立存储会减少不同业务相互操作的影响,提高请求响应速度;同时也避免单个实例内存数据量膨胀过大,在出现异常情况时可以更快恢复服务! 3.规范Key的格式 合适的key,便于查看,统计,排错。 “平台缩写“+“:”+“项目名”+“:”+“业务含义” 例如:GW:TRADE:USERID GW是新网关,TRADE是交易项目,USERID为业务ID。 ":"-作为key分隔符,方便客户端工具作为目录分级 4.存储的Key一定要设置超时时间 如果应用将Redis定位为缓存Cache使用,对于存放的Key一定要设置超时时间!因为若不设置,这些Key会一直占用内存不释放,造成极大的浪费,而且随着时间的推移会导致内存占用越来越大,直到达到服务器内存上限!另外Key的超时长短要根据业务综合评估,而不是越长越好!(某些业务要求key长期有效。可以在每次写入时,都设置超时时间,让超时时间顺延。) public Boolean set(final byte[] key, final byte[] value, final long liveTime) { return redisTemplate.execute(new RedisCallback() {

黑马程序员:为什么更要用redis,应该如何使用redis

为什么缓存数据库更要首选redis?如何使用redis? 一、使用缓存数据库为什么首选用redis? 我们都知道,把一些热数据存到缓存中可以极大的提高速度,那么问题来了,是用Redis 好还是Memcached好呢,以下是它们两者之间一些简单的区别与比较: 1. Redis不仅支持简单的k/v类型的数据,同时还支持list、set、zset(sorted set)、hash等数据结构的存储,使得它拥有更广阔的应用场景。 2. Redis最大的亮点是支持数据持久化,它在运行的时候可以将数据备份在磁盘中,断电或重启后,缓存数据可以再次加载到内存中,只要Redis配置的合理,基本上不会丢失数据。 3. Redis支持主从模式的应用。 4. Redis单个value的最大限制是1GB,而Memcached则只能保存1MB内的数据。 5. Memcache在并发场景下,能用cas保证一致性,而Redis事务支持比较弱,只能保证事务中的每个操作连续执行。 6. 性能方面,根据网友提供的测试,Redis在读操作和写操作上是略领先Memcached的。 从上面这些看出,Redis的优势比Memcached大,不过Memcached也还是有它用武之地的。要是只选择装其中一种的话,还是要首选Redis。 二、如何使用redis? 你一定要知道的是:redis的key名要区分大小写,在redis中除了和空格外,其他的字符都可以做为key名,且长度不做限制,不过为了性能考虑,一般key名不要设置的太长。redis 功能强大,支持数据类型丰富,以下是redis操作命令大全,基本上涵盖了redis所有的命令! 1、redis命令基本篇 1)、【set key value 】存入一个key和值。如:set myname reson 2)、【get key 】读取一个key的值。 3)、【del key 】删除一个key。 4)、【del key1 key2 ... keyN 】删除多个key。如:del myname1 myname2 5)、【exists key 】判断一个key是否存在。 6)、【type key 】查看key的类型。 7)、【rename key keyNew 】重命名key名。如:rename myname myname2 8)、【dbsize 】查看当前库中的key的条数。

Redis中5种数据结构的使用场景介绍

一、redis 数据结构使用场景 原来看过redisbook 这本书,对redis 的基本功能都已经熟悉了,从上周开始看redis 的源码。目前目标是吃透redis 的数据结构。我们都知道,在redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 下面我们就来简单说明一下它们各自的使用场景: 1. String——字符串 String 数据结构是简单的key-value 类型,value 不仅可以是String,也可以是数字(当数字类型用Long 可以表示的时候encoding 就是整型,其他都存储在sdshdr 当做字符串)。使用Strings 类型,可以完全实现目前Memcached 的功能,并且效率更高。还可以享受Redis 的定时持久化(可以选择RDB 模式或者AOF 模式),操作日志及Replication 等功能。除了提供与Memcached 一样的get、set、incr、decr 等操作外,Redis 还提供了下面一些操作: 代码如下: 1.LEN niushuai:O(1)获取字符串长度 2.APPEND niushuai redis:往字符串append 内容,而且采用智能分配内存(每次2倍) 3.设置和获取字符串的某一段内容 4.设置及获取字符串的某一位(bit) 5.批量设置一系列字符串的内容 6.原子计数器 7.GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用 2. Hash——字典 在Memcached 中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis 的Hash 结构可以使你像在数据库中Update 一个属性一样只修改某一项属性值。 代码如下: 存储、读取、修改用户属性 3. List——列表 List 说白了就是链表(redis 使用双端链表实现的List),相信学过数据结构知识的人都应该能理解其结构。使用List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的TimeLine )。List 的另一个应用就是消息队列,可以利用List 的*PUSH 操作,将任务存在List 中,然后工作线程再用POP 操作将任务取出进行执行。Redis 还提供了操作List 中某一段元素的API,你可以直接查询,删除List 中某一段的元素。 代码如下:

Redis中文入门手册

Redis中文入门手册1.0 中国海事服务网(https://www.360docs.net/doc/d213047597.html,) zhangli收集整理

目录 1)Redis简介 (3) 2)数据类型 (3) 2.1.Redis的Key (3) 2.1.1.key相关指令介绍 (3) 2.2.Redis的vaule (3) 2.2.1.string类型 (3) 2.2.2.hash类型 (4) 2.2.3.list类型 (5) 2.2.4.set类型 (5) 2.2.5.sorted set类型 (6) 3)持久化 (7) 3.1.快照方式:(默认持久化方式) (7) 3.2.日志追加方式: (7) 4)虚拟内存(适用于value比key大的情况) (8) 4.1.Redis虚拟内存简介 (8) 4.2.Redis虚拟内存相关配置 (8) 4.3.redis虚拟内存工作方式简介 (9) 4.3.1.当vm-max-threads设为0时(阻塞方式) (9) 4.3.2.当vm-max-threads大于0时(工作线程方式) (9) 5)主从同步 (9) 5.1.Redis主从复制简介 (9) 5.2.Redis主从复制的过程介绍 (10) 附录A:redis的安装与配置 (10) 1.1.安装 (10) 1.1.1.编译安装 (10) 1.1.2.配置 (11) 1.1.3.启动redis (11) 1.1.4.关闭redis (11) 1.1.5.更新安装redis (12) 1.1.6.redis系统管理相关指令简介 (12) 附录B:安装phpredis模块 (12) 参考资料与知识扩展 (13)

REDIS应用场景及建议

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis。 转向Redis当然也是可取的,许多开发者从一开始就把Redis作为首选数据库;但设想如果你的开发环境已经搭建好,应用已经在上面运行了,那么更换数据库框架显然不那么容易。另外在一些需要大容量数据集的应用,Redis也并不适合,因为它的数据集不会超过系统可用的内存。所以如果你有大数据应用,而且主要是读取访问模式,那么Redis并不是正确的选择。 然而我喜欢Redis的一点就是你可以把它融入到你的系统中来,这就能够解决很多问题,比如那些你现有的数据库处理起来感到缓慢的任务。这些你就可以通过Redis来进行优化,或者为应用创建些新的功能。在本文中,我就想探讨一些怎样将Redis加入到现有的环境中,并利用它的原语命令等功能来解决传统环境中碰到的一些常见问题。在这些例子中,Redis都不是作为首选数据库。 显示最新的项目列表 下面这个语句常用来显示最新项目,随着数据多了,查询毫无疑问会越来越慢。 1.SELECT * FROM foo WHERE ... ORDER BY time DESC LIMIT 10 在Web应用中,“列出最新的回复”之类的查询非常普遍,这通常会带来可扩展性问题。这令人沮丧,因为项目本来就是按这个顺序被创建的,但要输出这个顺序却不得不进行排序操作。 类似的问题就可以用Redis来解决。比如说,我们的一个Web应用想要列出用户贴出的最新20条评论。在最新的评论边上我们有一个“显示全部”的链接,点击后就可以获得更多的评论。 我们假设数据库中的每条评论都有一个唯一的递增的ID字段。 我们可以使用分页来制作主页和评论页,使用Redis的模板: -每次新评论发表时,我们会将它的ID添加到一个Redis列表: 1.LPUSH https://www.360docs.net/doc/d213047597.html,ments -我们将列表裁剪为指定长度,因此Redis只需要保存最新的5000条评论: 1.LTRIM https://www.360docs.net/doc/d213047597.html,ments 0 5000 -每次我们需要获取最新评论的项目范围时,我们调用一个函数来完成(使用伪代码): 1.FUNCTION get_latest_comments(start,num_items):

相关文档
最新文档