Redis怎么创建索引?实际操作一看就懂

Redis本身不支持传统索引,但可以巧妙实现

很多人在用Redis时会问:Redis怎么创建索引?其实Redis和MySQL不一样,它没有像关系型数据库那样的CREATE INDEX语法。但并不意味着不能做索引,只是方式更灵活,得靠我们自己设计数据结构来实现。

比如你是个电商网站开发者,想根据商品价格快速查出某区间内的商品,这时候就可以通过Redis的有序集合(ZSET)来“创建索引”。

用ZSET为数值字段建立索引

假设你要对商品价格做范围查询,可以把商品ID作为成员,价格作为分值存入ZSET:

ZADD price_index 99.5 item:1001
ZADD price_index 199.9 item:1002
ZADD price_index 59.8 item:1003

这样就相当于给价格建了个索引。查价格在60到200之间的商品,直接用ZRANGEBYSCORE:

ZRANGEBYSCORE price_index 60 200

返回的就是符合条件的商品ID列表。

用哈希+集合实现多条件索引

如果要按品牌查商品,可以用集合(SET)来维护品牌到商品ID的映射:

SADD brand:nike item:1001
SADD brand:nike item:1003
SADD brand:adidas item:1002

查Nike的所有商品,执行:

SMEMBERS brand:nike

再配合HGET获取每个商品详情,就能完成一次带“索引”的查询。

复合查询怎么办?拼接键名也是一种索引

比如要查“北京地区的VIP用户”,可以直接构造一个键名:

SADD region:beijing:vip user:1001
SADD region:beijing:vip user:1008

这种命名方式本质上就是一种静态索引,读起来清晰,查起来也快。

Redis没有现成的索引功能,但正因如此,给了我们更大的自由度去按业务需求设计访问路径。关键不是照搬SQL思维,而是理解数据怎么用,然后用合适的结构让它跑得更快。