跳转至

Redis SortedSet(有序集合)使用笔记

1、使用场合

有大量实时更新的数据待排序,使用Redis中的SortedSet降低代码复杂度并获得较好的排序时效性。

2、Redis

  • 安装

windows:前往github下载最新的msi文件进行安装即可。

ubuntu: sudo apt-get install redis-server

2、django-redis

  • 安装
pip install django-redis==4.8.0
  • 设置

settings.py

# 缓存
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
  • 文档

Django-Redis中文文档

  • 获取原生Redis连接

关于SortedSet的相关操作,django-redis不提供任何支撑,但是django-redis提供了接口可换取到原生redis客户端:

from django_redis import get_redis_connection
redis = get_redis_connection("default")

3、常用命令

  • zadd

total_point为有序集名称,user.point为值,user.id为键。

redis.zadd('total_point', user.point, user.id)

同时添加多个键值对有两种方式,1是使用*args:score1, name1, score2, name2, ...,2是使用**kwargs:name1=score1, name2=score2, ...

redis.zadd('my-key', 1.1, 'name1', 2.2, 'name2', name3=3.3, name4=4.4)
  • zscore

根据键去对应有序集查找值。

redis.zscore('total_point', user.id) 
  • zrank

根据键去对应有序集获取排名,值从小到大进行排序,第一名排名为0。

redis.zrank('total_point', user.id) + 1
  • zrevrank

根据键去对应有序集获取排名,值从大到小进行排序,第一名排名为0。

redis.zrevrank('total_point', user.id) + 1
  • zremrangebyrank

移除有序集中指定排名区间的所有成员,0表示第一个成员,-1表示最后一个成员。

# 清空有续集yesterday_point
redis.zremrangebyrank('yesterday_point', 0, -1) 

Redis命令参考