Redis基础


Redis经常在业务中被重度使用,但很多开发者只会简单的get、set、del,而不去进一步研究Redis的原理和最佳实践,导致埋下了很多坑。本文持续更新在使用Redis过程中积累的知识点。

基本概念

数据结构

Redis支持的数据结构:string(字符串)、hash(哈希)、list(链表)、set(集合)、zset(有序集合)、bitmaps(位图)、Hyperloglogs、GEO(地理信息定位)。

String

字符串是最基础的数据结构,首先键值都是字符串,而且其他所有数据结构都是在字符串类型上构建的,比如:复杂的字符串(JSON/XML)、数字(整数/浮点数)、二进制(图片/视频/音频),值最大不能超过512MB。Redis会根据当前值的类型和长度决定使用哪种内部编码实现,string的内部编码有下面三种:

最佳实践:

Hash

hash的映射关系叫key-field-value,hash的内部编码有两种:

hash和string对比,以存储用户信息为例:

List

list中的元素有两个特点:有序、可重复。list内部编码有三种:

典型的应用场景如消息队列。如果单纯想用作数组,则不建议使用list,虽然Redis提供的方法可以实现基本的数组操作,但如LINDEX/LSET/LINSERT等方法时间复杂度为O(n),谨慎使用。List还提供了一系列阻塞方法来更方便的实现消息队列,如BLPOP/BRPOP等,即在List为空时阻塞该连接,直到有对象可以POP时再返回。具体说明请参考官方文档

Set

set中的元素的特点:无序、不可重复。set的内部编码有两种:

zset

zset中元素的特点:有序、不可重复。有序集合类型的内部编码有两种:

list、set、zset对比如下: list-set-zset.jpg

规范

性能优化

慢查询

原因:使用不合理的API或数据结构。

常见使用场景

参考文章