Redis,编译安装 和初步使用都很简单,考验的还是对数据结构的理解;对应不同的问题选择合适的数据类型来解决;有时间可以多看看 Redis 所实现的 各种命令,中文版;
Redis,本质上,是一个 data structures server,即数据结构服务器,所谓的数据结构,就是数据的一种特定组织方式,比如 hash(哈希表,即散列)、list(链表)、set(集合)、zset(sorted set,有序集合);Redis 实现了以上所有的数据结构的存取访问(把 Redis 称为 key-value 存储系统是对 Redis 的一种最粗浅简单的认知);Redis 和 MySQL 一起构成了 Web 开发必不可少的两个高性能数据存储服务,值得好好使用;
- 支持丰富的数据类型;
特定的数据类型对于解决特定的问题来说,更容易理解、也更简单、更易维护;
应用场景非常多:缓存、消息、队列、会话、计数; - 从网络存取角度认识 Redis,实现了简单、丰富的 存取命令;
- 从持久化角度认识 Redis,可以堪比 MySQL;
- 从可用性角度认识 Redis,类似于 MySQL bin log 机制所建立的 Master/Slave 主从关系很牢靠;实现了可扩展性和高可用性;
支持多级主从关系:Slaves are able to accept connections from other slaves. - 从接口语言便利性认识 Reids,支持广泛,几乎任何语言都有实现;
- 如果你熟悉 memcached:
memcached 是一个简单的 string 和 object 的缓存,没有那么多数据结构(数据类型);仅从这一点,就和 Redis 不在一个数量级上;
仅从缓存性能看,Redis 也远胜于 memcached 的服务;
Redis means REmote DIctionary Server.
命令小记(命令字大写)
-
KEYS
KEYS pattern
:list of keys matching pattern;
命令行计算符合 pattern 的 key 的个数:redis-cli KEYS "abc:*" | wc -l
基于性能考虑,建议慎用; -
INFO
returns information and statistics about the server; 在 Keyspace section 有各个 database 的统计;
INFO keyspace
:方便查看各个库关于 key space 的基本情况; -
DBSIZE
Return the number of keys in the currently-selected database. -
TYPE 查看key的类型
TYPE key
-
SORT
SORT key BY nosort GET #
-
SCAN:
SCAN cursor [MATCH pattern] [COUNT count]
遍历元素,支持匹配模式;
iterates the set of keys in the currently selected Redis database.(遍历当前库的所有 key);
The SCAN command and the closely related commands SSCAN, HSCAN and ZSCAN are used in order to incrementally iterate over a collection of elements.
string
hash 哈希(散列 | 字典)
-
HSET:
HSET key field value
hash 适合存储一条表记录(记录 id 做 key)的各个字段名值对 field => value; -
HKEYS:
HKEYS key
Returns all field names in the hash stored at key.
列出所有字段名,有时会混淆 key and field;
如果和 HVALS 相对,这个命令使用 hfields 更好; -
HGETALL:
HGETALL key
Returns all fields and values of the hash stored at key. -
HLEN:
HLEN key
Returns the number of fields contained in the hash stored at key.
列表 list(列表是有序的)
-
LPUSH
列表 list 的命令; - LLEN
-
LRANGE:
LRANGE key start stop
Returns the specified elements of the list stored at key.
集合 sets 的命令(以 SADD 为代表)
- sets 集合:一堆不重复值的组合;
-
SADD:
SADD key member [member ...]
集合由一个一个的 member 组成; -
SCARD:
SCARD key
Returns the set cardinality (number of elements) of the set stored at key.
返回 member 个数; -
SMEMBERS:
SMEMBERS key
Returns all the members of the set value stored at key.
返回集合所有的 member 值;
有序集合 sorted sets 的命令(以 ZADD 为代表)
- 和 sets 相比,sorted sets 是将 set 中的 member 增加了一个权重参数 score,使得集合中的 member 能够按 score 进行有序排列;
- 对照普通集合 sets 来了解有序集合 sorted sets 的命令是很有意思的;
例如:ZADD,ZCARD,ZRANGE;
关于 EXPIRE
-
EXPIRE:
EXPIRE key seconds
设置过期时间;
设置 0 秒或者负值表示立刻过期; -
TTL:
TTL key
查看还有多长时间过期;
-1 表示未设过期;-2 表示 key 不存在; -
PERSIST:
PERSIST key
立刻取消过期时间的设置,变为永久存在; -
OBJECT:
OBJECT IDLETIME <key>
可以查看 key 空闲多长时间(秒)了,可以换算出最后一次访问时间; -
DEBUG OBJECT:
DEBUG OBJECT key
这个命令也很有帮助,lru_seconds_idle 就是空闲秒数;
为了安全,生产环境通常在配置文件中使用 rename-command 配置指令重命名这些命令名字:CONFIG、FLUSHDB、FLUSHALL、DEBUG; - MONITOR 实时显示 redis-server 处理的每个命令;
关于 CONFIG
CONFIG 是一组命令,通过 CONFIG GET 进一步了解;
使用何种数据类型?
- https://redislabs.com/blog/5-key-takeaways-for-developing-with-redis#.WDBEZKJ96hc
- http://stackoverflow.com/questions/24847539/redis-key-design
- http://openmymind.net/Data-Modeling-In-Redis/
- https://www.quora.com/What-are-5-mistakes-to-avoid-when-using-Redis
- https://developer.mozilla.org/en-US/docs/Mozilla/Redis_Tips
- http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html
- http://antirez.com/news/93
- https://www.linkedin.com/pulse/5-basic-steps-key-value-store-database-design-laszlo-wagner
参考文档
- Redis repository @ GitHub;
-
db-engines.com 排名;
根据统计,Redis 在键值数据存储引擎的排名中位于第一名,很受欢迎。 - 性能对比;