本文介绍了五个使用Redis使用时的注意事项。如果你在使用或者考虑使用Redis,你可以学习一下下面的一些建议,避免遇到以下提到的问题。

一、配置相关注意事项

1、涉及到内存的单位注意添加 b

1k => 1000 bytes   
1kb => 1024 bytes

2、daemonize为 yes 后台运行时,记得配置 pidfile

daemonize yes
pidfie /var/run/redis.pid

3、配置了最大内存 maxmemory 之后记得配置过期删除策略

maxmemory 5gb
maxmemory-policy volatile-lru ## 补充
# volatile-lru -> 根据LRU算法生成的过期时间来删除。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key。
# allkeys->random -> 无差别随机删。
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
# noeviction -> 谁也不删,直接在写操作时返回错误。

4、Redis 慢查询,只计算命令运行的实际时间

## 配置慢查询
# 单位是微妙
slowlog-log-slower-than 10000
# 服务器内存最多保存多少条慢查询日志,先进先出的方式覆盖
slowlog-max-len 128 ## 查看慢查询
SLOWLOG GET
## 慢查询清理
slowlog reset
## slowlog总数
SLOWLOG LEN
## slowlog get 1, 1 是得到一条 slowlog
1) (integer) 13 // slowlog唯一编号id
2) (integer) 1466499110 // 查询的时间戳
3) (integer) 41349 // 查询的耗时(微妙)
4) 1) "scan" // 查询命令,slowlog最多保存前面的31个key和128字符
2) "0"
3) "MATCH"
4) "*"
5) "COUNT"
6) "10000"

5、Redis 禁用某些命令

(error) ERR unknown command 'CONFIG'

## 上面的错误就是由于配置了如下命令导致的
rename-command config "" ## 也可以将其改名成你自己想改成的名字,别人不能猜到的
rename-command config "lcconfig"

二、使用注意事项

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当作你很多工具中的一个,只在合适使用的时候再使用它,在不合适的时候选择其它的方法。

最新文章

  1. Go 项目的目录结构 及 安装技巧
  2. Python之路 day2 文件基础操作
  3. 天气预报API(六):中国气象频道、腾讯天气--“新编码”接口的测试
  4. SQL Server 存储(4/8):理解Page Free Space (PFS) 页
  5. santoku学习笔记
  6. oracle 中如何定位重要(消耗资源多)的SQL【转】
  7. 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
  8. listview的条目(item)如何做出卡片效果
  9. Mac 上Tomcat装载
  10. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口
  11. [NOIP2013D2]
  12. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)
  13. zgrep用法
  14. 学习笔记37—WIN7系统本地连接没有有效的IP地址 电脑本地连接无有效ip配置怎么办
  15. jquery 实现iframe 自适应高度
  16. java 2和java有什么区别
  17. VMware下centos7安装VMware Tools
  18. hadoop基础-SequenceFile详解
  19. ::before ::after CSS3中的伪类和伪元素
  20. sublime_text3常用操作与快捷键

热门文章

  1. error: field has incomplete type
  2. WordPress博客搭建指南
  3. 解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式
  4. Sharepoint2013搜索学习笔记之修改搜索拓扑(三)
  5. Automake使用说明
  6. AGC001 C - Shorten Diameter【枚举】
  7. 十、正则表达式和JSON
  8. vue+element-ui实现无限级动态菜单树
  9. [WebShow系列] 倒计时展示相关问题
  10. JAVAFX-2 开发应用