4.1 Key设计 key的一个格式约定:object-type:id:field.用":"分隔域,用"."作为单词间的连接,如"comment:12345:reply.to".不推荐含义不清的key和特别长的key. 一般的设计方法如下: 1: 把表名转换为key前缀 如, tag: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c 4: 第
4.4 内存考虑 只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便.能够避免键名冲突.并且还能够节约内存. 具体实例: 节约内存:Instagram的Redis实践 blog.nosqlfan.com/html/3379.html 如果将redis作为cache进行频繁读写和超时删除等,此时应该避免设置较大的k-v,因为这样会导致redis的 内存碎片增加,导致rss占用较大,最后被操作系统OOM killer干掉.一个很具体的issue例子请见:https:/
4.6 典型使用场景参考 下面是Redis适用的一些场景: 1. 取最新 N 个数据的操作 比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的 5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取. 使用LPUSH latest.comments命令,向 list集合中插入数据 插入完成后再用 LTRIM latest.comments 0 5000 命令使其永远只保存最近5000个 ID 然后我们在客户端获取某一页评论时可以用下面的逻辑 FUNCTION
4.5 延迟考虑 1. 尽可能使用批量操作: mget.hmget而不是get和hget,对于set也是如此. lpush向一个list一次性导入多个元素,而不用lset一个个添加 LRANGE 一次取出一个范围的元素,也不用LINDEX一个个取出 2. 尽可能的把redis和APP SERVER部署在一个网段甚至一台机器. 3. 对于数据量较大的集合,不要轻易进行删除操作,这样会阻塞服务器,一般采用重命名+批量删除的策略: 排序集合: # Rename the key newkey = "gc
4.7 客户端推荐 4.7.1 Redis-Python驱动的安装和使用 unzip redis-py-master.zip cd redis-py-master/ sudo python setup.py install 完成后import redis即可. 4.7.2 Redis-Java客户端推荐 Jedis :https://github.com/xetorthio/jedis 重点推荐 Spring Data redis :https://github.com/spring-proje
3.3 流水线 利用流水线(pipeline)的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端: cat data.txt | redis-cli –pipe 在选择开源redis开发库时需要着重注意是否支持pipeline,常见的jedis可以支持. 在部署架构是网络多跳的时候需要注意使用pipeline提高处理效率. Redis开发运维实践指南 本文为<Redis开发运维实践指南>内容,
2.4.1 添加元素 sadd key member 成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误 2.4.2 移除元素 srem key member 成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误 2.4.3 删除并返回元素 spop key 如果set是空或者key不存在返回nil 2.4.4 随机返回一个元素 srandmember key 同spop,随机取set中的一个元素,但是不删除元素 2.
5.1 内存.CPU规划 一定要设置最大内存maxmemory参数,否则物理内存用爆了就会大量使用Swap,写RDB文件时的速度很慢.注意这个参数指的是info中的used_memory,在一些不利于jmalloc的时候,内存碎片会很大. 多留55%内存是最安全的.重写AOF文件和RDB文件的进程(即使不做持久化,复制到Slave的时候也要写RDB)会fork出一条新进程来,采用了操作系统的Copy-On-Write策略(子进程与父进程共享Page.如果父进程的Page-每页4K有修改,父进程自