【后端】redis的缓存使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

随着开发语言及人工智能工具的普及,使得越来越多的人学习Redis,MySQL等数据库,本文主要是介绍Redis的缓存存储使用场景。


一、Redis是什么

Redis 是一个开源的高性能键值数据库,通常用作数据结构服务器,支持多种类型的数据结构如字符串、哈希表、列表、集合、有序集合等。它支持数据的持久化,可以将内存中的数据保存在磁盘上,还支持事务、复制和自动分区等功能。

Redis 被广泛用于缓存解决方案,因为它提供极高的性能,使其能够快速读取和写入,从而大大减少了数据访问的延迟。此外,它还常用于实现会话缓存、消息队列系统、快速计数系统等。

二、Redis的缓存使用

当在Python中使用Redis进行缓存存储时,通常会涉及将数据从数据库或其他数据源中读取并存储在Redis中,以便后续访问时能够快速获取数据。以下是一个简单的示例,展示了如何在Python中使用Redis作为缓存存储的案例:

python 复制代码
import redis
import json
import time

# 连接到Redis服务器
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)

# 模拟从数据库中获取数据的函数
def fetch_data_from_database():
    # 这里模拟从数据库中获取数据,实际应用中可能是查询数据库或其他数据源
    # 这里简单返回一个字典作为模拟数据
    return {'user_id': 123, 'username': 'example_user', 'email': '[email protected]'}

def get_user_data(user_id):
    # 先尝试从Redis缓存中获取数据
    cached_data = redis_client.get(f'user:{user_id}')
    
    if cached_data:
        # 如果缓存中存在数据,则直接返回
        return json.loads(cached_data)
    else:
        # 如果缓存中不存在数据,则从数据库中获取数据,并存储到Redis缓存中
        user_data = fetch_data_from_database()
        redis_client.setex(f'user:{user_id}', 3600, json.dumps(user_data))  # 设置缓存过期时间为1小时
        return user_data

# 测试获取用户数据
user_id = 123
start_time = time.time()
user_data = get_user_data(user_id)
end_time = time.time()
print(f'从缓存中获取用户数据:{user_data}')
print(f'耗时:{end_time - start_time}秒')

# 再次获取用户数据,这次应该从缓存中获取,而不是从数据库中读取
start_time = time.time()
user_data = get_user_data(user_id)
end_time = time.time()
print(f'再次从缓存中获取用户数据:{user_data}')
print(f'耗时:{end_time - start_time}秒')

在这个示例中,我们首先连接到了Redis服务器,然后定义了一个函数fetch_data_from_database()来模拟从数据库中获取用户数据。然后,我们定义了一个函数get_user_data()来获取用户数据,它首先尝试从Redis缓存中获取数据,如果缓存中不存在,则从数据库中获取数据,并将其存储到Redis缓存中。在存储到缓存中时,我们使用了setex()方法设置了缓存的过期时间为1小时。


三、总结

以上就是今天要讲的内容,通过这样的方式,我们可以利用Redis作为缓存存储,加速数据的访问,降低数据库的负载,提高应用的性能和扩展性。

相关推荐
betazhou25 分钟前
有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
linux·数据库·mysql·oracle·mariadb
Elohim81531 分钟前
数据库SQLite基础
数据库·sqlite
TDengine (老段)42 分钟前
TDengine 支持的平台汇总
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
大熊猫侯佩1 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(四)
数据库·swiftui·apple watch
想用offer打牌2 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql
chen.@-@2 小时前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
王小小鸭2 小时前
【Oracle APEX开发小技巧12】
数据库·oracle
噼里啪啦啦.2 小时前
Spring事务和事务传播机制
数据库·sql·spring
搬码红绿灯2 小时前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构
呼拉拉呼拉2 小时前
Redis高可用架构
数据库·redis·架构·高可用架构