下面内容来源于Quora上的一个提问,问题是使用Redis须要避免的五个问题。而回答中超出了五个问题的范畴,描述了五个使用Redis的注意事项。若是你在使用或者考虑使用Redis,可能你能够学习一下下面的一些建议,避免一下提到的问题。数据库
虽说Redis支持多个数据库(默认32个,能够配置更多),可是除了默认的0号库之外,其它的都须要经过一个额外请求才能使用。因此用前缀做为命名空间可能会更明智一点。工具
另外,在使用前缀做为命名空间区隔不一样key的时候,最好在程序中使用全局配置来实现,直接在代码里写前缀的作法要严格避免,这样可维护性实在太差了。性能
为了更好的管理你的key值的使用,好比哪一类key值是属于哪一个业务的,你一般会在内部wiki或者什么地方建立一个文档,经过查询这个文档,咱们可以知道Redis中的key都是什么做用。学习
与之结合,一个推荐的作法是,在Redis里面保存一个registry值,这个值的名字能够相似于 __key_registry__ 这样的,这个key对应的value就是你文档的位置,这样咱们在使用Redis的时候,就能经过直接查询这个值获取到当前Redis的使用状况了。spa
Redis是一个提供持久化功能的内存数据库,若是你不指定上面值的过时时间,而且也不进行按期的清理工做,那么你的Redis内存占用会愈来愈大,当有一天它超过了系统可用内存,那么swap上场,离性能陡降的时间就不远了。因此在Redis中保存数据时,必定要预先考虑好数据的生命周期,这有不少方法能够实现。设计
好比你能够采用Redis自带的过时时间为你的数据设定过时时间。可是自动过时有一个问题,颇有可能致使你还有大量内存可用时,就让key过时去释放内存,或者是内存已经不足了key尚未过时。排序
若是你想更精准的控制你的数据过时,你能够用一个ZSET来维护你的数据更新程度,你能够用时间戳做为score值,每次更新操做时更新一下score,这样你就获得了一个按更新时间排序序列串,你能够轻松地找到最老的数据,而且从最老的数据开始进行删除,一直删除到你的空间足够为止。生命周期
Redis目前并不支持Sharding,可是当你的数据量超过单机内存时,你不得不考虑Sharding的事(注意:Slave不是用来作Sharding操做的,只是数据的一个备份和读写分离而已)。内存
因此你可能须要考虑好数据量大了后的分片问题,好比你能够在只有一台机器的时候就在程序上设定一致性hash机制,虽然刚开始全部数据都hash到一台机器,可是当你机器越加越多的时候,你就只须要迁移少许的数据就能完成了。文档
当你使用Redis构建你的服务的时候,必定要记住,你只是找了一个合适的工具来实现你须要的功能。而不是说你在用Redis构建一个服务,这是很不一样的,你把Redis看成你不少工具中的一个,只在合适使用的时候再使用它,在不合适的时候选择其它的方法。