概述 redis并不是单纯的缓存服务器,而是被设计为一个数据结构服务器。为服务提供有用高效的数据类型.
redis中主要包含如下数据类型:
字符串,二进制安全。 列表list, 链表实现。不是array. 集合set, 值不可重复. 排序集合ordered-set. 同时存储一个value和一个score. score用于排序. 字典hash, 类似python的字典和ruby的hash,但是field-key/field-value只能是字符串. bit-array或bitmaps. HyperLogLogs, 概率行数据结构. TODO 不同数据结构可以根据需要解决不同的任务集。
类型具体说明 redis-key redis-key只能是字符串,并且是2进制安全。
空字符串也能做为key. 太长的key不被推荐,compare性能不好. 太短的key不好,可读性不好 u1000flw => user:1000:followers 对键做良好的管理,引入命名空间和键前缀等概念. user:1000, comment:1234.replys 最大长度512MB, 不会成为限制。 exists判断key是否存在, del用于删除key, keys用于列出keys.type获取key类型. ttl/expire用于获取和设置过期时间. persist移除key的过期设置。pttl/pexpire返回/设置millsecond级别的过期时间. redis-string 最简单的数据结构,应该也是最常用的数据结构(缓存).
通过get/set设置和换取
set在没有key时会创建key,在key存在时做update.同时可以制定second/millsecond级别的过期时间.
可以支持incr/incrby/decr/decrby,把字符串作为数字执行原子性的+/-.底层使用的是同一个命令。
getset获取key的old-value, 同时设置为最新的value.
mset/mget一次对多个key做操作.
redis-list 列表, 链表实现, 在列表中间插入/移除元素的复杂度为O(1), 查找元素的复杂度为O(N).
大多数操作都支持左右两个方向, lpush/rpush. l->list前缀/r->reverse-order
两个方向的push/pop可以作为队列/栈使用. lrange用于获取列表内容.常用的场景:
Jan 8, 2016
1 min read
原内容来自redis官方文档: redis-replication官方文档
基本来说,只要在配置文件里加上
# slaveof <ip> <port> slaveof 127.0.0.1 6379 就可以完成配置.
如下配置可能有用
# 不使用磁盘同步 repl-diskless-sync # 同步前的延时, 以等待其他的要链接的slave repl-diskless-sync-delay 安全问题 如果redis开启复制特性,同时master节点关闭持久化特性。
这时应该避免master节点的自动重启,避免slave节点上的数据被重启的master节点清空。
同步策略 redis默认使用磁盘同步, 数据被存到RDB file文件, 之后通过同步该文件做full-sync.
但是如果磁盘太慢会导致性能不好,2.8新增直接通过socket来同步的方式.(该方式目前仍然是实验阶段)
只读复制 redis默认slave是只读的,所有写操作会报错. 通过如下方式可以打开读写
# 配置文件 slave-read-only noconfig # redis-cli运行时 set slave-read-only no 即便是只读slave也不应该暴露在公网下. debug/config等命令仍会带来完全问题(使用rename-command配置)
读写slave在较少场景下会有用。未来redis有可能移除该特性.
认证 redis很快,所以需要设置足够强的密码,不然会很容易被破解。
master节点可以通过配置,要求所有链接需要认证
requirepass <password> 这时slave节点需要做如下配置
# 运行时 config set masterauth <password> # 配置文件 masterauth <password> 部分同步 TODO
控制slave链接数 TODO
代码建议统一使用pep8规范加上部分最佳实践。
风格指南是关于一致性的。风格一致对一个项目更重要。
Guido 的主要洞察力 (key insights) 之一是:代码更多是用来读而不是写。
故本指南致力于改善 Python 代码的可读性、使不同的 (wide spectrum) Python 代码 保持一致性。
python code comment style
pep8规范 代码pep8规范可以使用python pep8工具做检查.
安装方法 pip install pep8
使用方法 pep8 <python文件>
一般IDE工具都会有集成,可以在编写代码的工程中做pep8校验. 可自行google设置方法。
代码布局 每级缩进用 4 个空格。
建议使用4个空格代替tab,最流行的 Python 缩进方式是仅使用空格
绝不要混合使用 tab 和空格。建议打开IDE中的tab和空格(或至少显示行尾空格)显示。
限制所有行的最大行宽为 79 字符。
折叠长行的首选方法是使用 Python 支持的圆括号、方括号 (brackets) 和花括号 (braces) 内的行延续。
如果需要,你可以在表达式周围增加一对额外的圆括号,但是 有时使用反斜杠看起来更好。确认恰当地缩进了延续的行.
用两行空行分割顶层函数和类的定义。 类内方法的定义用单个空行分割。
在函数中使用空行时,请谨慎的用于表示一个逻辑段落 (logical sections)。
python文件应统一使用utf8编码,并建议在文件头加生utf8声明。 申明头如下
## 格式一 # -*- coding: utf-8 -*- ## 格式二 #!
Jan 8, 2016
1 min read