<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Redis%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C</id>
	<title>Redis常用操作 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Redis%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Redis%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C&amp;action=history"/>
	<updated>2026-04-17T12:02:10Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Redis%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C&amp;diff=934&amp;oldid=prev</id>
		<title>Evan：​/* 清理 */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Redis%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C&amp;diff=934&amp;oldid=prev"/>
		<updated>2022-11-22T01:02:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;清理&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
[[Redis运维]]&lt;br /&gt;
&lt;br /&gt;
=清理=&lt;br /&gt;
&lt;br /&gt;
[[Redis批量删除key]]&lt;br /&gt;
&lt;br /&gt;
 redis-cli -h 192.168.10.213 -c -p 7004 -a passwD9923 KEYS &amp;quot;dict_telegram_group_telegram_group_share_id&amp;quot; | xargs -I {} redis-cli -h 192.168.10.213 -c -p 7004 -a passwD9923 del {}&lt;br /&gt;
&lt;br /&gt;
=ops about=&lt;br /&gt;
Redis Client List 命令 - 获取连接到服务器的客户端连接列表&lt;br /&gt;
&lt;br /&gt;
https://www.redis.net.cn/order/3657.html&lt;br /&gt;
&lt;br /&gt;
=version说明=&lt;br /&gt;
版本号第二位如果是奇数，则为非稳定版本（例如2.7、2.9、3.1），如果是偶数，则为稳定版本（例如2.6、2.8、3.0、3.2），&lt;br /&gt;
&lt;br /&gt;
=usage=&lt;br /&gt;
&lt;br /&gt;
redis基本命令 String&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
非交互  redis-cli -h  -p    youcommand&lt;br /&gt;
&lt;br /&gt;
 redis-cli   -h  127.0.0.1 &lt;br /&gt;
127.0.0.1:6379&amp;gt; Auth upassword&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
set hey you &lt;br /&gt;
&lt;br /&gt;
set love you &lt;br /&gt;
&lt;br /&gt;
redis&amp;gt; SET key1 &amp;quot;Hello&amp;quot;&lt;br /&gt;
&amp;quot;OK&amp;quot;&lt;br /&gt;
redis&amp;gt; SET key2 &amp;quot;World&amp;quot;&lt;br /&gt;
&amp;quot;OK&amp;quot;&lt;br /&gt;
redis&amp;gt; DEL key1 key2 key3&lt;br /&gt;
(integer) 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keys *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://redis.io/commands/del&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SETEX 命令的效果和以下两个命令的效果类似：&lt;br /&gt;
&lt;br /&gt;
SET key value&lt;br /&gt;
EXPIRE key seconds  # 设置生存时间&lt;br /&gt;
&lt;br /&gt;
SETEX 和这两个命令的不同之处在于 SETEX 是一个原子（atomic）操作， 它可以在同一时间内完成设置值和设置过期时间这两个操作， 因此 SETEX 命令在储存缓存的时候非常实用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==usage from 运维开发与运维==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
创建新列表&lt;br /&gt;
  &lt;br /&gt;
127.0.0.1:6379&amp;gt; rpush listkey c java  b a&lt;br /&gt;
(integer) 4&lt;br /&gt;
&lt;br /&gt;
#查看列表  -1 就是所有 了&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey 0 -1&lt;br /&gt;
1) &amp;quot;c&amp;quot;&lt;br /&gt;
2) &amp;quot;java&amp;quot;&lt;br /&gt;
3) &amp;quot;b&amp;quot;&lt;br /&gt;
4) &amp;quot;a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4.1 &lt;br /&gt;
1 添加操作&lt;br /&gt;
&lt;br /&gt;
#在 b前插入java &lt;br /&gt;
127.0.0.1:6379&amp;gt; linsert listkey  before b java&lt;br /&gt;
(integer) 0&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey 0 -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.查找&lt;br /&gt;
&lt;br /&gt;
2 到 4  &lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey  1  3&lt;br /&gt;
1) &amp;quot;java&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
3) &amp;quot;a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey  1  3&lt;br /&gt;
1) &amp;quot;java&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
3) &amp;quot;a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3.删除 &lt;br /&gt;
lpop key &lt;br /&gt;
&lt;br /&gt;
(1) 左弹出&lt;br /&gt;
127.0.0.1:6379&amp;gt; lpop listkey&lt;br /&gt;
&amp;quot;c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
右弹出 &lt;br /&gt;
rpop key &lt;br /&gt;
&lt;br /&gt;
(3)删除指定元素&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrem listkey 4  a #删除左开始的4个为a的元素&lt;br /&gt;
(integer) 1&lt;br /&gt;
&lt;br /&gt;
(4)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey 0 -1&lt;br /&gt;
1) &amp;quot;c&amp;quot;&lt;br /&gt;
2) &amp;quot;java&amp;quot;&lt;br /&gt;
3) &amp;quot;b&amp;quot;&lt;br /&gt;
127.0.0.1:6379&amp;gt; ltrim listkey 1 3 #1 到3 被删除了&lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379&amp;gt; lrange listkey 0 -1&lt;br /&gt;
1) &amp;quot;java&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4.修改&lt;br /&gt;
#把第三个改为python&lt;br /&gt;
127.0.0.1:6379&amp;gt;  rpush listkey c java  b a&lt;br /&gt;
(integer) 4&lt;br /&gt;
127.0.0.1:6379&amp;gt; lset listkey 2  python&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
5 阻塞操作&lt;br /&gt;
blpop &lt;br /&gt;
brpop &lt;br /&gt;
&lt;br /&gt;
2.4.2 内部编码 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===选择库 select ===&lt;br /&gt;
 选择第5个库&lt;br /&gt;
 select 5&lt;br /&gt;
&lt;br /&gt;
===2.5 集合===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2.5.1 命令&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(1) add &lt;br /&gt;
27.0.0.1:6379&amp;gt; exists myset &lt;br /&gt;
(integer) 0&lt;br /&gt;
127.0.0.1:6379&amp;gt; sadd myset a b c &lt;br /&gt;
(integer) 3&lt;br /&gt;
127.0.0.1:6379&amp;gt; sadd myset a b &lt;br /&gt;
(integer) 0&lt;br /&gt;
&lt;br /&gt;
(2) del &lt;br /&gt;
127.0.0.1:6379&amp;gt; srem myset a b &lt;br /&gt;
(integer) 2&lt;br /&gt;
&lt;br /&gt;
(3) count&lt;br /&gt;
127.0.0.1:6379&amp;gt; scard myset &lt;br /&gt;
(integer) 1&lt;br /&gt;
&lt;br /&gt;
(4) exists&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; sismember myset c &lt;br /&gt;
(integer) 1&lt;br /&gt;
&lt;br /&gt;
(5)随机&lt;br /&gt;
127.0.0.1:6379&amp;gt; sadd myset a b c &lt;br /&gt;
(integer) 2&lt;br /&gt;
127.0.0.1:6379&amp;gt; srandmember myset 2 &lt;br /&gt;
1) &amp;quot;a&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(6)&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; spop myset &lt;br /&gt;
&amp;quot;a&amp;quot;&lt;br /&gt;
127.0.0.1:6379&amp;gt; srandmember myset 2 &lt;br /&gt;
1) &amp;quot;c&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
&lt;br /&gt;
7)取得所有&lt;br /&gt;
127.0.0.1:6379&amp;gt; smembers myset &lt;br /&gt;
1) &amp;quot;c&amp;quot;&lt;br /&gt;
2) &amp;quot;b&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.集合间操作&lt;br /&gt;
&lt;br /&gt;
2.集合间操作&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; SADD user:1:follow it music his sports&lt;br /&gt;
(integer) 4&lt;br /&gt;
127.0.0.1:6379&amp;gt; SADD user:2:follow it music his sports&lt;br /&gt;
(integer) 4&lt;br /&gt;
&lt;br /&gt;
交集&lt;br /&gt;
127.0.0.1:6379&amp;gt; sinter user:1:follow user:2:follow&lt;br /&gt;
1) &amp;quot;sports&amp;quot;&lt;br /&gt;
2) &amp;quot;it&amp;quot;&lt;br /&gt;
&lt;br /&gt;
并集&lt;br /&gt;
127.0.0.1:6379&amp;gt; sunion  user:1:follow user:2:follow&lt;br /&gt;
1) &amp;quot;sports&amp;quot;&lt;br /&gt;
2) &amp;quot;his&amp;quot;&lt;br /&gt;
3) &amp;quot;music&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(4) 结果保存&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) &amp;quot;it&amp;quot;&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; sdiff   user:1:follow user:2:follow&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.5.2 内部编码 &lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; sadd  setkey 1 2 3 4&lt;br /&gt;
(integer) 4&lt;br /&gt;
127.0.0.1:6379&amp;gt; object encoding setkey&lt;br /&gt;
&amp;quot;intset&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.5.3 使用场景&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.6 有序集合===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2.6.1&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
127.0.0.1:6379&amp;gt; zadd user:ranking 251  tom &lt;br /&gt;
(integer) 1&lt;br /&gt;
&lt;br /&gt;
27.0.0.1:6379&amp;gt; zadd user:ranking 1 kris 91 mike  220 frank 220 tim 250 martin&lt;br /&gt;
(integer) 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; zcard user:ranking &lt;br /&gt;
(integer) 6&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; zscore user:ranking tom &lt;br /&gt;
&amp;quot;251&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
排名&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrank user:ranking tom &lt;br /&gt;
(integer) 5&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrevrank user:ranking tom &lt;br /&gt;
(integer) 0&lt;br /&gt;
&lt;br /&gt;
删除成员&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrem user:ranking mike &lt;br /&gt;
(integer) 1&lt;br /&gt;
&lt;br /&gt;
加了9分&lt;br /&gt;
127.0.0.1:6379&amp;gt; zincrby user:ranking 9  tom &lt;br /&gt;
&amp;quot;260&amp;quot;&lt;br /&gt;
&lt;br /&gt;
（7）返回指定排名范围的成员&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrange user:ranking 0 2 withscores&lt;br /&gt;
1) &amp;quot;kris&amp;quot;&lt;br /&gt;
2) &amp;quot;1&amp;quot;&lt;br /&gt;
3) &amp;quot;mike&amp;quot;&lt;br /&gt;
4) &amp;quot;91&amp;quot;&lt;br /&gt;
5) &amp;quot;frank&amp;quot;&lt;br /&gt;
6) &amp;quot;200&amp;quot;&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrevrange user:ranking 0 2 withscores&lt;br /&gt;
1) &amp;quot;tom&amp;quot;&lt;br /&gt;
2) &amp;quot;251&amp;quot;&lt;br /&gt;
3) &amp;quot;martin&amp;quot;&lt;br /&gt;
4) &amp;quot;250&amp;quot;&lt;br /&gt;
5) &amp;quot;tim&amp;quot;&lt;br /&gt;
6) &amp;quot;220&amp;quot;&lt;br /&gt;
&lt;br /&gt;
8）返回指定分数范围的成员&lt;br /&gt;
127.0.0.1:6379&amp;gt; zrangebyscore user:ranking (200 +inf withscores&lt;br /&gt;
1) &amp;quot;tim&amp;quot;&lt;br /&gt;
2) &amp;quot;220&amp;quot;&lt;br /&gt;
3) &amp;quot;martin&amp;quot;&lt;br /&gt;
4) &amp;quot;250&amp;quot;&lt;br /&gt;
5) &amp;quot;tom&amp;quot;&lt;br /&gt;
6) &amp;quot;251&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
（9）返回指定分数范围成员个数&lt;br /&gt;
&lt;br /&gt;
返回200到221分的成员的个数&lt;br /&gt;
127.0.0.1:6379&amp;gt; zcount user:ranking 200 221 &lt;br /&gt;
(integer) 2&lt;br /&gt;
&lt;br /&gt;
10）删除指定排名内的升序元素&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.6.1  2019年 8月23日 星期五 14时41分48秒 CST&lt;br /&gt;
&lt;br /&gt;
2.集合间的操作&lt;br /&gt;
两个有序集合导入到Redis中&lt;br /&gt;
zadd user:ranking:1 1 kris 91 mike 200 frank 220 tim 250 martin&lt;br /&gt;
zadd user:ranking:2 8 james 77 mike 625 martin 888 tom&lt;br /&gt;
&lt;br /&gt;
Redis DEL 命令&lt;br /&gt;
&amp;gt; DEL KEY_NAME&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://www.redis.net.cn/order/3528.html  Redis DEL 命令 - 该命令用于在 key 存在是删除 key]&lt;br /&gt;
&lt;br /&gt;
==2.7 键管理 ==&lt;br /&gt;
===2.7.1 单个键管理 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2019年 8月31日 星期六 16时03分38秒 CST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.key rename &lt;br /&gt;
rename key newkey&lt;br /&gt;
renamenx 比较安全&lt;br /&gt;
127.0.0.1:6379&amp;gt; get evan&lt;br /&gt;
&amp;quot;36&amp;quot;&lt;br /&gt;
127.0.0.1:6379&amp;gt; rename evan eva&lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379&amp;gt; get eva&lt;br /&gt;
&amp;quot;36&amp;quot;&lt;br /&gt;
127.0.0.1:6379&amp;gt; get evan&lt;br /&gt;
(nil)&lt;br /&gt;
&lt;br /&gt;
2.随机返回&lt;br /&gt;
randomkey&lt;br /&gt;
&lt;br /&gt;
3.key 过期 2019年 9月 1日&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379&amp;gt; set hello world&lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379&amp;gt; expire hello 10&lt;br /&gt;
(integer) 1&lt;br /&gt;
127.0.0.1:6379&amp;gt; ttl hello&lt;br /&gt;
(integer) 1&lt;br /&gt;
127.0.0.1:6379&amp;gt; ttl hello&lt;br /&gt;
(integer) -2&lt;br /&gt;
&lt;br /&gt;
4.key 迁移&lt;br /&gt;
&lt;br /&gt;
(1) move 不用 知道就行了 &lt;br /&gt;
(2)dump + restore&lt;br /&gt;
&lt;br /&gt;
(3)migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===2.7.2 遍历键 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
key partern  &lt;br /&gt;
&lt;br /&gt;
get &lt;br /&gt;
key *&lt;br /&gt;
&lt;br /&gt;
2.渐进式子&lt;br /&gt;
&lt;br /&gt;
scan &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===2.7.3 数据库管理 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1.切换 select   默认是 0&lt;br /&gt;
&lt;br /&gt;
127.0.0.1:6379[2]&amp;gt; set hello love &lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379[2]&amp;gt; SELECT 3&lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379[3]&amp;gt; get hello&lt;br /&gt;
(nil)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.flushdb flushall&lt;br /&gt;
&lt;br /&gt;
flushall 全部数据不见了 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[https://www.cnblogs.com/Cherry-Linux/p/8046276.html Redis键迁移]&lt;br /&gt;
&lt;br /&gt;
=Chpater 3 =&lt;br /&gt;
&lt;br /&gt;
==慢查询分析==&lt;br /&gt;
[https://blog.csdn.net/sunhuiliang85/article/details/74800001 redis-慢查询分析]&lt;br /&gt;
&lt;br /&gt;
==redis shell==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
redis-cli&lt;br /&gt;
-r&lt;br /&gt;
evan@latop:~$ redis-cli  -r 3  ping &lt;br /&gt;
PONG&lt;br /&gt;
PONG&lt;br /&gt;
PONG&lt;br /&gt;
&lt;br /&gt;
evan@latop:~$ redis-cli  -r 3 -i 1 ping &lt;br /&gt;
PONG&lt;br /&gt;
PONG&lt;br /&gt;
PONG&lt;br /&gt;
&lt;br /&gt;
evan@latop:~$ echo &amp;quot;world&amp;quot; |redis-cli  -x set hello&lt;br /&gt;
127.0.0.1:6379&amp;gt; get  hello&lt;br /&gt;
&amp;quot;world\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-c  cluster&lt;br /&gt;
&lt;br /&gt;
-a (auth)&lt;br /&gt;
&lt;br /&gt;
6.--scan and --pattern &lt;br /&gt;
&lt;br /&gt;
7 --slave &lt;br /&gt;
&lt;br /&gt;
8 --rdb  &lt;br /&gt;
&lt;br /&gt;
12 -- latency &lt;br /&gt;
&lt;br /&gt;
13 --stat  实时 比info 简单些&lt;br /&gt;
&lt;br /&gt;
redis-cli --stat &lt;br /&gt;
------- data ------ --------------------- load -------------------- - child -&lt;br /&gt;
keys       mem      clients blocked requests            connections          &lt;br /&gt;
1          838.51K  1       0       5 (+0)              2           &lt;br /&gt;
1          838.51K  1       0       6 (+1)              2           &lt;br /&gt;
1          838.51K  1       0       7 (+1)              2           &lt;br /&gt;
&lt;br /&gt;
14 --no-raw 原始格式 &lt;br /&gt;
   --raw  格式化过&lt;br /&gt;
   &lt;br /&gt;
   127.0.0.1:6379&amp;gt; set evan &amp;quot;你�好&amp;quot;&lt;br /&gt;
OK&lt;br /&gt;
127.0.0.1:6379&amp;gt; get evan &lt;br /&gt;
&amp;quot;\xe4\xbd\xa0\xe5\x8f\xe5\xa5\xbd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
redis-cli --raw get evan &lt;br /&gt;
你�好&lt;br /&gt;
&lt;br /&gt;
3.2.2  redis-server   --test-memory 1024 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Chpater 5 持久化 =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
redis的存储功能只是用做备份，恢复的功能,全量数据还是存储在内存中。&lt;br /&gt;
redis内部提供了两种固化数据的方式，aof 和rdb。&lt;br /&gt;
&lt;br /&gt;
运维提示&lt;br /&gt;
当硬盘坏或者 写满时 可以   config set dir {newDir} 在线修改文件路径 到可用的磁盘 再执行bgsave 同样可以用于aof&lt;br /&gt;
&lt;br /&gt;
5.2 AOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.2.1　使用AOF&lt;br /&gt;
      开启AOF功能需要设置配置：appendonly yes，默认不开启。AOF文件名&lt;br /&gt;
通过appendfilename配置设置，默认文件名是appendonly.aof。保存路径同&lt;br /&gt;
RDB持久化方式一致，通过dir配置指定。AOF的工作流程操作：命令写入&lt;br /&gt;
（append）、文件同步（sync）、文件重写（rewrite）、重启加载&lt;br /&gt;
（load），如图5-2所示&lt;br /&gt;
&lt;br /&gt;
·配置为everysec，是建议的同步策略，也是默认配置，做到兼顾性能和&lt;br /&gt;
数据安全性。理论上只有在系统突然宕机的情况下丢失1秒的数据。（严格&lt;br /&gt;
来说最多丢失1秒数据是不准确的&lt;br /&gt;
&lt;br /&gt;
还是建议在配置文件配置上 &lt;br /&gt;
&lt;br /&gt;
# appendfsync always&lt;br /&gt;
appendfsync everysec&lt;br /&gt;
# appendfsync no&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
appendonly yes  打开aof 持久化   #默认是no &lt;br /&gt;
&lt;br /&gt;
5.2.4 重写机制 不全明&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.2.5 重启加载&lt;br /&gt;
AOF持久化开启且存在AOF文件时，优先加载AOF文件，&lt;br /&gt;
AOF关闭或者AOF文件不存在时，加载RDB文件&lt;br /&gt;
&lt;br /&gt;
5.3  问题定位与优化&lt;br /&gt;
&lt;br /&gt;
5.3.1&lt;br /&gt;
&lt;br /&gt;
fork耗时问题定位：对于高流量的Redis实例OPS可达5万以上，如果fork&lt;br /&gt;
操作耗时在秒级别将拖慢Redis几万条命令执行，对线上应用延迟影响非常&lt;br /&gt;
明显。正常情况下fork耗时应该是每GB消耗20毫秒左右。可以在info stats统&lt;br /&gt;
计中查latest_fork_usec指标获取最近一次fork操作耗时，单位微秒。&lt;br /&gt;
n&lt;br /&gt;
      如何改善fork操作的耗时：&lt;br /&gt;
      1）优先使用物理机或者高效支持fork操作的虚拟化技术，避免使用&lt;br /&gt;
      Xen。&lt;br /&gt;
&lt;br /&gt;
      2）控制Redis实例最大可用内存，fork耗时跟内存量成正比，线上建议&lt;br /&gt;
      每个Redis实例内存控制在10GB以内。&lt;br /&gt;
&lt;br /&gt;
      3）合理配置Linux内存分配策略，避免物理内存不足导致fork失败，具&lt;br /&gt;
      体细节见12.1节“Linux配置优化”。&lt;br /&gt;
&lt;br /&gt;
5.3.2　子进程开销监控和优化&lt;br /&gt;
&lt;br /&gt;
5.3.3 AOF追加阻塞&lt;br /&gt;
&lt;br /&gt;
5。4&lt;br /&gt;
# Persistence from bsd&lt;br /&gt;
loading:0&lt;br /&gt;
rdb_changes_since_last_save:0&lt;br /&gt;
rdb_bgsave_in_progress:0&lt;br /&gt;
rdb_last_save_time:1567955166&lt;br /&gt;
rdb_last_bgsave_status:ok&lt;br /&gt;
rdb_last_bgsave_time_sec:-1&lt;br /&gt;
rdb_current_bgsave_time_sec:-1&lt;br /&gt;
aof_enabled:0&lt;br /&gt;
aof_rewrite_in_progress:0&lt;br /&gt;
aof_rewrite_scheduled:0&lt;br /&gt;
aof_last_rewrite_time_sec:-1&lt;br /&gt;
aof_current_rewrite_time_sec:-1&lt;br /&gt;
aof_last_bgrewrite_status:ok&lt;br /&gt;
aof_last_write_status:ok&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/0d626a8a1177 redis源码分析（五）：数据持久化]&lt;br /&gt;
&lt;br /&gt;
[https://www.v2ex.com/t/219551 redis 本身有持久化，为什么还要写进 mysql ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://gsmtoday.github.io/2018/07/30/Redis%E6%8C%81%E4%B9%85%E5%8C%96%E6%80%BB%E7%BB%93/ Redis持久化总结 ]&lt;br /&gt;
&lt;br /&gt;
https://blog.csdn.net/kfengqingyangk/article/details/53454309&lt;br /&gt;
&lt;br /&gt;
https://blog.csdn.net/ljl890705/article/details/51039015&lt;br /&gt;
&lt;br /&gt;
[https://my.oschina.net/u/4613350/blog/4701317 同样是持久化，竟然有这么大的差别！]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/cbe1238f592a Redis持久化：RDB（快照）和AOF（写命令）]&lt;br /&gt;
&lt;br /&gt;
=* chpater 6  Redis复制=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/houjixin/article/details/27680183 Redis 数据同步机制分析]&lt;br /&gt;
=* chpater 7  Redis的噩梦:阻塞=&lt;br /&gt;
&lt;br /&gt;
2019年 9月 9日 星期一 14时5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==** 7.1  发现==&lt;br /&gt;
&lt;br /&gt;
应用方加入异常监控之后还存在一个问题,当开发人员接到异常报警&lt;br /&gt;
后,通常会去线上服务器查看错误日志细节。这时如果应用操作的是多个&lt;br /&gt;
404Redis节点(比如使用Redis集群),如何决定是哪一个节点超时还是所有的&lt;br /&gt;
节点都有超时呢?这是线上很常见的需求,但绝大多数的客户端类库并没有&lt;br /&gt;
在异常信息中打印ip和port信息,导致无法快速定位是哪个Redis节点超时。&lt;br /&gt;
不过修改Redis客户端成本很低,比如Jedis只需要修改Connection类下的&lt;br /&gt;
connect、sendCommand、readProtocolWithCheckingBroken方法专门捕获连&lt;br /&gt;
接,发送命令,协议读取事件的异常。由于客户端类库都会保存ip和port信&lt;br /&gt;
息,当异常发生时很容易打印出对应节点的ip和port,辅助我们快速定位问&lt;br /&gt;
题节点。&lt;br /&gt;
&lt;br /&gt;
==** 7.2  内在原因 ==&lt;br /&gt;
&lt;br /&gt;
.如何发现慢查询&lt;br /&gt;
Redis原生提供慢查询统计功能,执行slowlog get{n}命令可以获取最近&lt;br /&gt;
的n条慢查询命令,默认对于执行超过10毫秒的命令都会记录到一个定长队&lt;br /&gt;
列中,线上实例建议设置为1毫秒便于及时发现毫秒级以上的命令&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===7.2.2===&lt;br /&gt;
CPU饱和&lt;br /&gt;
&lt;br /&gt;
首先判断当前Redis的并&lt;br /&gt;
发量是否达到极限,建议使用统计命令redis-cli-h{ip}-p{port}--stat获取当前&lt;br /&gt;
Redis使用情况,该命令每秒输出一行统计信息&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.redis.io/topics/latency。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===7.3.1===&lt;br /&gt;
CPU竞争&lt;br /&gt;
对于开启了持久化或参与复制的主节点不建议绑定CPU。&lt;br /&gt;
&lt;br /&gt;
=* 第8章 理解内存=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.10.201:7000&amp;gt; info memory&lt;br /&gt;
# Memory&lt;br /&gt;
used_memory:2653536&lt;br /&gt;
used_memory_human:2.53M&lt;br /&gt;
used_memory_rss:17285120&lt;br /&gt;
used_memory_rss_human:16.48M&lt;br /&gt;
used_memory_peak:2756424&lt;br /&gt;
used_memory_peak_human:2.63M&lt;br /&gt;
used_memory_peak_perc:96.27%&lt;br /&gt;
used_memory_overhead:2580244&lt;br /&gt;
used_memory_startup:1464224&lt;br /&gt;
used_memory_dataset:73292&lt;br /&gt;
used_memory_dataset_perc:6.16%&lt;br /&gt;
allocator_allocated:3146048&lt;br /&gt;
allocator_active:3551232&lt;br /&gt;
allocator_resident:12943360&lt;br /&gt;
total_system_memory:16808693760&lt;br /&gt;
total_system_memory_human:15.65G&lt;br /&gt;
used_memory_lua:38912&lt;br /&gt;
used_memory_lua_human:38.00K&lt;br /&gt;
used_memory_scripts:216&lt;br /&gt;
used_memory_scripts_human:216B&lt;br /&gt;
number_of_cached_scripts:1&lt;br /&gt;
maxmemory:0&lt;br /&gt;
maxmemory_human:0B&lt;br /&gt;
maxmemory_policy:noeviction&lt;br /&gt;
allocator_frag_ratio:1.13&lt;br /&gt;
allocator_frag_bytes:405184&lt;br /&gt;
allocator_rss_ratio:3.64&lt;br /&gt;
allocator_rss_bytes:9392128&lt;br /&gt;
rss_overhead_ratio:1.34&lt;br /&gt;
rss_overhead_bytes:4341760&lt;br /&gt;
mem_fragmentation_ratio:6.62&lt;br /&gt;
mem_fragmentation_bytes:14672608&lt;br /&gt;
mem_not_counted_for_evict:612&lt;br /&gt;
mem_replication_backlog:1048576&lt;br /&gt;
mem_clients_slaves:16922&lt;br /&gt;
mem_clients_normal:49694&lt;br /&gt;
mem_aof_buffer:612&lt;br /&gt;
mem_allocator:jemalloc-5.1.0&lt;br /&gt;
active_defrag_running:0&lt;br /&gt;
lazyfree_pending_objects:0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
需要重点关注的指标有:used_memory_rss和used_memory以及它们的比&lt;br /&gt;
mem_fragmentation_ratio。&lt;br /&gt;
&lt;br /&gt;
详情&lt;br /&gt;
&lt;br /&gt;
# Memory&lt;br /&gt;
                         #由Redis分配器分配的内存总量，以字节（byte）为单位  &lt;br /&gt;
used_memory:2653536&lt;br /&gt;
used_memory_human:2.53M&lt;br /&gt;
used_memory_rss:17285120&lt;br /&gt;
&lt;br /&gt;
mem_fragmentation_ratio:6.62&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===*** 8.1.2内存消耗划分===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
开发环境的数据 &lt;br /&gt;
# Memory&lt;br /&gt;
                        &lt;br /&gt;
used_memory:2653536   #由Redis分配器分配的内存总量，以字节（byte）为单位 &lt;br /&gt;
used_memory_human:2.53M&lt;br /&gt;
used_memory_rss:17285120&lt;br /&gt;
&lt;br /&gt;
mem_fragmentation_ratio:6.62&lt;br /&gt;
&lt;br /&gt;
基础 &lt;br /&gt;
1 Byte = 8 Bits&lt;br /&gt;
&lt;br /&gt;
1 KB = 1024 Bytes&lt;br /&gt;
&lt;br /&gt;
1 MB = 1024 KB&lt;br /&gt;
&lt;br /&gt;
1 GB = 1024 MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Redis进程内消耗主要包括:自身内存+对象内存+缓冲内存+内存碎片,&lt;br /&gt;
中Redis空进程自身内存消耗非常少,通常used_memory_rss在3MB左右,&lt;br /&gt;
used_memory在800KB左右,一个空的Redis进程消耗内存可以忽略不计。&lt;br /&gt;
is主要内存消耗如图8-1所示。下面介绍另外三种内存消耗。&lt;br /&gt;
&lt;br /&gt;
used_memory:2653536  =2.5306Mb&lt;br /&gt;
&lt;br /&gt;
1.对象内存&lt;br /&gt;
&lt;br /&gt;
2.缓冲内存&lt;br /&gt;
&lt;br /&gt;
3.内存碎片&lt;br /&gt;
&lt;br /&gt;
Redis默认的内存分配器采用jemalloc,可选的分配器还有:glibc、&lt;br /&gt;
tcmalloc。内存分配器为了更好地管理和重复利用内存,分配内存策略一般&lt;br /&gt;
采用固定范围的内存块进行分配。例如jemalloc在64位系统中将内存空间划&lt;br /&gt;
分为:小、大、巨大三个范围。每个范围内又划分为多个小的内存块单位,&lt;br /&gt;
如下所示:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===***8.1.3  子进程内存消耗===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
子进程内存消耗主要指执行AOF/RDB重写时Redis创建的子进程内存消&lt;br /&gt;
耗。Redis执行fork操作产生的子进程内存占用量对外表现为与父进程相同,&lt;br /&gt;
理论上需要一倍的物理内存来完成重写操作。但Linux具有写时复制技术&lt;br /&gt;
(copy-on-write),父子进程会共享相同的物理内存页,当父进程处理写请&lt;br /&gt;
求时会对需要修改的页复制出一份副本完成写操作,而子进程依然读取fork&lt;br /&gt;
时整个父进程的内存快照。&lt;br /&gt;
&lt;br /&gt;
当分别开启和关闭THP时,子进程内存&lt;br /&gt;
消耗有天壤之别。如果在高并发写的场景下开启THP,子进程内存消耗可能&lt;br /&gt;
是父进程的数倍,极易造成机器物理内存溢出,从而触发SWAP或OOM&lt;br /&gt;
killer,更多关于THP细节见12.1节“Linux配置优化”。&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====子进程内存消耗总结如下:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
·Redis产生的子进程并不需要消耗1倍的父进程内存,实际消耗根据期&lt;br /&gt;
间写入命令量决定,但是依然要预留出一些内存防止溢出。&lt;br /&gt;
&lt;br /&gt;
·需要设置sysctl vm.overcommit_memory=1允许内核可以分配所有的物理&lt;br /&gt;
内存,防止Redis进程执行fork时因系统剩余内存不足而失败。&lt;br /&gt;
&lt;br /&gt;
·排查当前系统是否支持并开启THP,如果开启建议关闭,防止copy-on-&lt;br /&gt;
write期间内存过度消耗。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==**8.2  内存管理==&lt;br /&gt;
===8.2.1 设置内存上限===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    Mem=`free -m | awk &amp;#039;/Mem:/{print $2}&amp;#039;`&lt;br /&gt;
    redis_maxmemory=`expr $Mem / 8`000000 #here&lt;br /&gt;
    [ -z &amp;quot;`grep ^maxmemory ${redis_install_dir}/etc/redis.conf`&amp;quot; ] &amp;amp;&amp;amp; sed -i &amp;quot;s@maxmemory &amp;lt;byt&lt;br /&gt;
es&amp;gt;@maxmemory &amp;lt;bytes&amp;gt;\nmaxmemory `expr $Mem / 8`000000@&amp;quot; ${redis_install_dir}/etc/redis.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===8.2.2 动态调整内存上限===&lt;br /&gt;
&lt;br /&gt;
===8.2.3 内存回收策略===&lt;br /&gt;
 单机和主备的Redis实例默认的数据逐出策略为不逐出（noeviction ？&lt;br /&gt;
&lt;br /&gt;
==8.3 内存优化==&lt;br /&gt;
===8.3.1 redisObject对象 ===&lt;br /&gt;
开发提示&lt;br /&gt;
高并发写入场景中,在条件允许的情况下,建议字符串长度控制在39字&lt;br /&gt;
,减少创建redisObject内存分配次数,从而提高性能。&lt;br /&gt;
===8.3.2 缩减键值对象 ===&lt;br /&gt;
&lt;br /&gt;
===8.3.3 共享对象池 ===&lt;br /&gt;
&lt;br /&gt;
===8.3.4字符串优化===&lt;br /&gt;
&lt;br /&gt;
=== 8.3.5编码优化 ===&lt;br /&gt;
&lt;br /&gt;
=chapter 10 Cluster=&lt;br /&gt;
== ==&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
&lt;br /&gt;
== ==&lt;br /&gt;
=redis学习（五） redis过期时间=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
　1.EXPIRE PEXPIRE &lt;br /&gt;
&lt;br /&gt;
　　EXPIRE 接口定义：EXPIRE key &amp;quot;seconds&amp;quot;&lt;br /&gt;
　　接口描述：设置一个key在当前时间&amp;quot;seconds&amp;quot;(秒)之后过期。返回1代表设置成功，返回0代表key不存在或者无法设置过期时间。&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/xiaoxiongcanguan/p/9937433.html redis学习（五） redis过期时间]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/weixin_38399962/article/details/82697498  Redis 更新(set) key值 会重置过期时间问题]&lt;br /&gt;
&lt;br /&gt;
=redis info命令详解=&lt;br /&gt;
== memory : 内存信息，包含以下域==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
used_memory:35795152                              #由Redis分配器分配的内存总量，以字节（byte）为单位  &lt;br /&gt;
used_memory_human:34.14M                          #以MB为单位返回由Redis分配器分配的内存总量&lt;br /&gt;
used_memory_rss:50876416                          #从操作系统的角度，返回 Redis 已分配的内存总量（俗称常驻集大小）&lt;br /&gt;
used_memory_peak:595513248                        #Redis 的内存消耗峰值（以字节为单位）    &lt;br /&gt;
used_memory_peak_human:567.93M                    #以MB为单位返回Redis 的内存消耗峰值   &lt;br /&gt;
used_memory_lua:35840                             #Lua 引擎所使用的内存大小（以字节为单位）&lt;br /&gt;
mem_fragmentation_ratio:1.42                      #used_memory_rss 和 used_memory 之间的比率  &lt;br /&gt;
mem_allocator:jemalloc-3.6.0                      #在编译时指定的， Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/lang_man_xing/article/details/38539057 redis info命令详解]&lt;br /&gt;
&lt;br /&gt;
[https://segmentfault.com/a/1190000004682946 redis info命令详细说明]&lt;br /&gt;
&lt;br /&gt;
=redis.conf 详解=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.cnblogs.com/kreo/p/4423362.html&lt;br /&gt;
&lt;br /&gt;
https://blog.csdn.net/kfengqingyangk/article/details/53454309&lt;br /&gt;
&lt;br /&gt;
https://blog.csdn.net/ljl890705/article/details/51039015&lt;br /&gt;
&lt;br /&gt;
https://blog.csdn.net/qq_19707521/article/details/70676213&lt;br /&gt;
&lt;br /&gt;
https://www.jianshu.com/p/fa27ddf84455&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/uglyliu/p/8052648.html redis.conf 配置项说明如]&lt;br /&gt;
&lt;br /&gt;
=[[Docker redis]]=&lt;br /&gt;
&lt;br /&gt;
=see also=&lt;br /&gt;
&lt;br /&gt;
[[Redis备份与恢复]]&lt;br /&gt;
&lt;br /&gt;
[[Redis安全]]&lt;br /&gt;
&lt;br /&gt;
https://stackoverflow.com/questions/49061445/when-redis-get-key-in-slave-why-redirect-to-master&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/zhangweizhong/p/7531471.html 运维常用命令]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/liqingtx/article/details/60330555 超强、超详细Redis入门教程]&lt;br /&gt;
&lt;br /&gt;
[https://www.runoob.com/redis/redis-php.html PHP 使用 Redis]&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/themost/p/8464490.html redis常用命令]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.runoob.com/redis/redis-server.html Redis 服务器runoob]&lt;br /&gt;
&lt;br /&gt;
[https://www.w3cschool.cn/redis_all_about/ Redis开发运维实践指南]&lt;br /&gt;
&lt;br /&gt;
[http://redisdoc.com/string/setex.html SETEX key seconds value]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/2639549bedc8 使用python来操作redis用法详解]&lt;br /&gt;
&lt;br /&gt;
[https://zhuanlan.zhihu.com/p/47692277 Redis 常用操作命令，非常详细！]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:redis]] [[category:ops]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>