[转]缓存大量小文件?Redis是首选!

标签: | 发表时间:2013-07-11 10:28 | 作者:zeo112140
出处:http://blog.csdn.net/zeo112140

现在有3KW的数据,单条数据都很小的,如果按key-value来看的话,key就是32位的MD5字符串,value按平均算大概是100字节左右。

现在需要将这些数据做缓存以在高并发的时候依然可以快速响应。

因为这些数据基本没有冷热数据之分,所以需要将全部数据都放到缓存中。

1、直接生成静态文件,利用nginx对静态文件的高效做静态缓存。

  • 当时服务器硬件资源有限,所以就采用这种方式,一直源用至今。
  • 服务器间通过NFS来共享
  • 太多小文件,不方便管理
  • NFS不方便运维与扩展
  • 文件内容很小(100字节左右),3KW大概就是2.5G大小左右
    • 不过文件存储的时候和硬盘分区的族大小有关,在这里磁盘分区的族大小为8K,所以尽管文件内容只有100字节,但是实际存储到磁盘上的时候单个文件其实是8K
    • 所以3KW的文件世界占的磁盘空间大约为:200G左右( 严重浪费空间啊

2、Redis(V2.2.11)【KV数据库】

  • 听同事说开启VM会使性能急剧下降,所以基本无视VM,数据全放内存。
  • key为32位MD5字符串
  • 测试数据:10W数据大概占内存20M
  • 测试数据:500W数据大概占内存1G,持久化的rdb数据文件大概350M
  • 推算3KW数据:内存6G,持久化的rdb数据文件大概为2G(压缩了?)
  • 因为Redis在持久化的时候内存会加倍,和考虑到数据的增长,所以需要1台20G内存的机器基本就没问题了(容灾啥的另算)。
  • Redis非常快,如果硬件条件没问题,基本选这个最好了。

3、Moosefs(MFS)【分布式文件存储系统】

  • mfs支持NFS的方式mount到本地直接操作(如使用mfs,则现在的架构基本不用改)
  • 最基本的需要一台主控服务器(Master Server)、一台数据服务器(Chunk Server)
  • 文件和目录的索引需要全部加载到主控服务器的内存中,所以对主控服务器的内存有一定的要求
  • 写入30W文件,到20W的时候写入就开始下降得厉害了(我的5400转的笔记本硬盘)
  • 30W文件,4W目录,主控服务器占用大概120M内存
  • 文件存储方式貌似和普遍的文件一样单个存储的(不确定),30W文件大概占了2.4G的磁盘空间(同样是8K一个文件)。
  • 小文件一样很多,不方便维护与迁移(不知是否我设置不对?)。
  • 内存、硬盘都占用得比较多,而且性能相对来说不是很出众。
  • 所以这个基本不考虑了。

作者:QLeelulu  出处: http://QLeelulu.cnblogs.com/

作者:zeo112140 发表于2013-7-11 10:28:48 原文链接
阅读:7 评论:0 查看评论

相关 [缓存 文件 redis] 推荐:

[转]缓存大量小文件?Redis是首选!

- - 小鸥的博客
现在有3KW的数据,单条数据都很小的,如果按key-value来看的话,key就是32位的MD5字符串,value按平均算大概是100字节左右. 现在需要将这些数据做缓存以在高并发的时候依然可以快速响应. 因为这些数据基本没有冷热数据之分,所以需要将全部数据都放到缓存中. 1、直接生成静态文件,利用nginx对静态文件的高效做静态缓存.

redis spring缓存配置

- - CSDN博客推荐文章
使用redis做缓存的思路是在spring的项目中配置拦截器,在service层做切面,在findXXX或者getXXX等方法上进行拦截判断是否缓存即可. 1.环境:spring 3.1.2 + spring data redis 1.0.0+ jedis 2.1.0. 2.spring配置文件配置:.

Redis 缓存失效机制

- - 文章 – 伯乐在线
Redis缓存失效的故事要从EXPIRE这个命令说起,EXPIRE允许用户为某个key指定超时时间,当超过这个时间之后key对应的值会被清除,这篇文章主要在分析Redis源码的基础上站在Redis设计者的角度去思考Redis缓存失效的相关问题. Redis缓存失效机制是为应对缓存应用的一种很常见的场景而设计的,讲个场景:.

Spring Boot使用redis做数据缓存

- - ITeye博客
SysUser.class)); //请注意这里. 3 redis服务器配置. /** *此处的dao操作使用的是spring data jpa,使用@Cacheable可以在任意方法上,*比如@Service或者@Controller的方法上 */ public interface SysUserRepo1 extends CustomRepository {.

使用Redis作为一个LRU缓存

- - 并发编程网 - ifeve.com
原文链接  译者:flychao88. 当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据. 这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为. LRU实际上只是支持驱逐的方式之一. 这页包含更多一般的Redis maxmemory指令的话题用于限制内存使用到一个定额,同时它也深入的涵盖了Redis所使用的LRU算法,实际上是精确LRU的近似值.

redis数据结构缓存运用

- - 企业架构 - ITeye博客
之前redis已经描述了redis 的基本作用与用处, 这一篇主要讲述redis运用场景以及分片,和spring整合. redis 存储数据结构大致5种,String 普通键值对,用的比较多. HASH针对 key 唯一标识 hashmap 键值对运用也比较多 list set 当然是集合运用 sortedSet 排序集合使用.

Spring AOP + Redis缓存数据库查询

- - 编程语言 - ITeye博客
我们希望能够将数据库查询结果缓存到Redis中,这样在第二次做同样的查询时便可以直接从redis取结果,从而减少数据库读写次数. 必须要做到与业务逻辑代码完全分离. 从缓存中读出的数据必须与数据库中的数据一致. 如何为一个数据库查询结果生成一个唯一的标识. Key),能唯一确定一个查询结果,同一个查询结果,一定能映射到同一个.

spring + redis 实现数据的缓存

- - ImportNew
(目的不是加快查询的速度,而是减少数据库的负担). 注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要配对使用,否则将会报错. 因为commons-pooljar的目录根据版本的变化,目录结构会变. 前面的版本是org.apache.pool,而后面的版本是org.apache.pool2….

redis作为mysql的缓存服务器(读写分离)

- - 数据库 - ITeye博客
Redis是一个key-value存储系统. 和Memcached类似,为了保证效率,数据都是缓存在内存中. 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步. 在部分场合可以对关系数据库起到很好的补充作用. 它提供了Java,C/C++(hiredis),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便.

高性能网站架构之缓存篇—Redis集群搭建

- - 开源软件 - ITeye博客
1.  Redis Cluster的架构图.          (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽..          (2)节点的fail是通过集群中超过半数的节点检测失效时才生效..          (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可.