使用Redis的五个注意事项

数据库 其他数据库 Redis
下面内容来源于Quora上的一个提问,问题是使用Redis需要避免的五个问题。而回答中超出了五个问题的范畴,描述了五个使用Redis的注意事项。如果你在使用或者考虑使用Redis,可能你可以学习一下下面的一些建议,避免一下提到的问题。

下面内容来源于Quora上的一个提问,问题是使用Redis需要避免的五个问题。而回答中超出了五个问题的范畴,描述了五个使用Redis的注意事项。如果你在使用或者考虑使用Redis,可能你可以学习一下下面的一些建议,避免一下提到的问题。

1.使用key值前缀来作命名空间

虽然说Redis支持多个数据库(默认32个,可以配置更多),但是除了默认的0号库以外,其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。

另外,在使用前缀作为命名空间区隔不同key的时候,***在程序中使用全局配置来实现,直接在代码里写前缀的做法要严格避免,这样可维护性实在太差了。

2.创建一个类似 ”registry” 的key用于标记key使用情况

为了更好的管理你的key值的使用,比如哪一类key值是属于哪个业务的,你通常会在内部wiki或者什么地方创建一个文档,通过查询这个文档,我们能够知道Redis中的key都是什么作用。

与之结合,一个推荐的做法是,在Redis里面保存一个registry值,这个值的名字可以类似于 __key_registry__ 这样的,这个key对应的value就是你文档的位置,这样我们在使用Redis的时候,就能通过直接查询这个值获取到当前Redis的使用情况了。

3.注意垃圾回收

Redis是一个提供持久化功能的内存数据库,如果你不指定上面值的过期时间,并且也不进行定期的清理工作,那么你的Redis内存占用会越来越大,当有一天它超过了系统可用内存,那么swap上场,离性能陡降的时间就不远了。所以在Redis中保存数据时,一定要预先考虑好数据的生命周期,这有很多方法可以实现。

比如你可以采用Redis自带的过期时间为你的数据设定过期时间。但是自动过期有一个问题,很有可能导致你还有大量内存可用时,就让key过期去释放内存,或者是内存已经不足了key还没有过期。

如果你想更精准的控制你的数据过期,你可以用一个ZSET来维护你的数据更新程度,你可以用时间戳作为score值,每次更新操作时更新一下score,这样你就得到了一个按更新时间排序序列串,你可以轻松地找到最老的数据,并且从最老的数据开始进行删除,一直删除到你的空间足够为止。

4.设计好你的Sharding机制

Redis目前并不支持Sharding,但是当你的数据量超过单机内存时,你不得不考虑Sharding的事(注意:Slave不是用来做Sharding操作的,只是数据的一个备份和读写分离而已)。

所以你可能需要考虑好数据量大了后的分片问题,比如你可以在只有一台机器的时候就在程序上设定一致性hash机制,虽然刚开始所有数据都hash到一台机器,但是当你机器越加越多的时候,你就只需要迁移少量的数据就能完成了。

5.不要有个锤子看哪都是钉子

当你使用Redis构建你的服务的时候,一定要记住,你只是找了一个合适的工具来实现你需要的功能。而不是说你在用Redis构建一个服务,这是很不同的,你把Redis当作你很多工具中的一个,只在合适使用的时候再使用它,在不合适的时候选择其它的方法。

英文连接:http://www.quora.com/Redis/What-are-5-mistakes-to-avoid-when-using-Redis

原文链接:http://blog.nosqlfan.com/html/3705.html

【编辑推荐】

  1. 论NoSQL的数据模型
  2. 利用Java进行MySql数据库的导入和导出
  3. 20个数据库设计***实践
  4. 如何定义NoSQL
  5. MoreSQL(NewSQL)挑战 NoSQL?
责任编辑:林师授 来源: nosqlfan
相关推荐

2024-11-15 10:00:00

Python爬虫开发

2024-03-19 17:35:49

商务办公

2010-11-26 16:27:01

MySQL使用变量

2023-04-28 15:05:25

React软件项目可维护性

2023-09-05 06:44:41

2024-10-10 17:00:30

2011-07-28 17:29:22

HBaseShell

2010-01-21 11:30:10

2011-05-26 11:22:04

SEO

2023-09-12 08:33:45

Redis@CacheEvic

2014-01-10 10:36:39

Hypervisor

2010-01-18 14:25:19

使用C++Builde

2011-07-19 10:16:58

喷墨打印机注意事项

2010-10-26 17:28:15

创建Oracle索引

2021-10-08 11:45:33

内存HeapByteBuf堆内

2010-07-20 13:02:03

SQL Server索

2009-08-27 10:40:56

Java路径

2011-07-26 18:43:34

HBase Shell

2013-09-25 10:15:51

闪存存储优势注意事项

2011-08-02 13:08:06

Oracle索引
点赞
收藏

51CTO技术栈公众号