本文介绍: 做动态页面缓存,以此提高访问速度,但同时我们也提到了还有少部分动态页面不可以对整个页面进行缓存的,例如商品页面用户详情页面等。尽管这些页面不可使用页面缓存,但我们可以对其中动态内容需要数据进行缓存,从而加快动态页面绘制读取数据速度,减少页面载入所需的时间。,加入数据更新周期不存在,那么我们需要删除该数据的缓存。在这里我们采用一种更便捷的方式避免数据缓存取消数据缓存,那就是该数据的更新周期设置为小于等于我们将数据加入缓存队列后,就将有序集合。.将数据加入缓存队列
目的

本关目的:使用Redis实现数据缓存

相关知识

本文将将会你掌握1.将数据加入缓存队列2缓存数据。

在我之前的文章中提到了实现使用 Redis 动态页面缓存,以此提高访问速度,但同时我们也提到了还有少部分动态页面是不可以对整个页面进行缓存的,例如商品页面,用户详情页面等。尽管这些页面不可使用页面缓存,但我们仍可以对其中动态内容需要的数据进行缓存,从而加快动态页面绘制读取数据的速度,减少页面载入所需的时间

使用 Redis 做数据缓存的做法是:

JSON

一种轻量级的数据交换格式。大多数编程语言都能高效地编码/解码 JSON 格式的数据。

将数据加入缓存队列

有序集合 cache:list 作为缓存队列,其需要依赖数据更新周期有序集合 cache:delay,加入某数据的更新周期不存在,那么我们则需要删除该数据的缓存。在这里,我们采用一种更便捷的方式避免数据缓存和取消数据缓存,那就是该数据的更新周期设置为小于等于 0

将数据加入缓存队列需要同时操作两个有序集合

def add_cache_list(data_id, delay):
conn.zadd('cache:delay', data_id, delay)
conn.zadd('cache:list', data_id, time.time())
缓存数据

我们将数据加入到缓存队列后,就将有序集合 cache:list 的分值看作下一次要更新的时间,所以我们可以根据分值对有序集合 cache:list 进行排序,并连同分值一起取出从小到大顺序第一个成员(最可能需要更新的成员):

conn.zrange('cache:list', 0, 0, withscores=True)

其中 withscores=True 会告诉 Redis 返回成员时一同返回成员的分值,返回一个由零或一个元组组成的列表例如[(member1, score1)]

接下来,我们再判断成员的分值:

将这些过程编写cache_row() 方法

def cache_data():
    # 从有序集合'cache:list'中获取排名第一的元素及其分数scorenext = conn.zrange('cache:list', 0, 0, withscores=True)
    # 获取当前时间
    now = time.time()
    # 如果没有一个元素或者一个元素的时间戳大于当前时间,则休眠0.1秒
    if not next or next[0][1] > now:
        time.sleep(0.1)

    # 获取下一个元素的ID
    data_id = next[0][0]
    # 获取该元素在有序集合'cache:delay'中的分数,即延迟delay = conn.zscore('cache:delay', data_id)
    # 如果延迟值小于等于0,则表示数据已过期
    if delay <= 0:
        # 从'cache:delay'集合中移除该数据的ID
        conn.zrem('cache:delay', data_id)
        # 从'cache:list'集合中移除该数据的ID
        conn.zrem('cache:list', data_id)
        # 删除键为'cache:data:' + data_id相关数据
        conn.delete('cache:data:' + data_id)
    else:
        # 创建一个包虚假数据的字典对象
        data = {'id': data_id, 'data': 'fake data'}
        # 更新有序集合'cache:list'中该数据的时间戳,使其在延迟之后再次被处理
        conn.zadd('cache:list', data_id, now + delay)
        # 将虚假数据存储在键为'cache:data:' + data_id的Redis键中
        conn.set('cache:data:' + data_id, json.dumps(data))

原文地址:https://blog.csdn.net/nuhao/article/details/134703132

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_#ID#.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注