2023年8月22日星期二

速成pyredis

速成pyredis

‘’’
同步的redis
‘’’

import redis
import pandas as pd

redis_conn = redis.Redis(host='127.0.0.1',port=6379)

redis_conn.delete(*redis_conn.keys()) # 必须确保有keys

0.清除所有keys

for key in redis_conn.keys():
    redis_conn.delete(key)

1.使用Hash(类似map)存储文章的 (ID、标题)数据:

for idx in range(101,106):
    redis_conn.hset(name="BookShelf",key=str(idx),value=f"Book{idx} by scb")

展示所有文章列表

print("id           ","title")

for article_id, article_title in redis_conn.hgetall("BookShelf").items():
    print(article_id,"      ",article_title)# 默认返回bytes类型
    print(article_id.decode(),article_title.decode())

print('#'*30)

展示单个文章的标题

print(redis_conn.hget("BookShelf",104))

2.使用String存储每个文章的访问次数,可以每次加1计数(或者存储文章ID的标签、作者等附加属性都可以)

3.使用List存储每个用户的访问文章的历史,按顺序记录;

4.使用Set存储访问网站的所有用户ID的集合:

5.使用Sorted Set存储网站的热榜,排序分数就是权重

def user_visit(uid:str,*article_ids):
    for article_id in article_ids:
        redis_conn.incr(name=f"article_counter_{article_id}")                        # string结构访问次数+1
        redis_conn.lpush(f"user_history_{uid}",str(article_id))                      # list结构加入阅读列表
        redis_conn.sadd(f"all_visits_user",uid)                                      # set结构,记录uid的全站集合
        redis_conn.zincrby("article_hots",1,str(article_id))                         # sortedset结构,文章热度+1

user_visit("epicmo",101,102)
user_visit("wisdomgo",103,105,101)

print(redis_conn.get("article_counter_103"))
print(redis_conn.get("article_counter_101"))

    
### 展示list
print(redis_conn.lrange("user_history_wisdomgo",0,-1))

### 展示set
print(redis_conn.smembers("all_visits_user"))

### 展示sortedset
print(redis_conn.zrange("article_hots",0,-1,withscores=True,desc=True))

0 评论:

发表评论