当前位置: 首页 > news >正文

Redis(以Django为例,含具体操作步骤)

简介

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),可用作数据库、缓存或消息队列。其核心特点包括:

  • 高性能:数据存储在内存中,读写速度极快。
  • 持久化:支持快照(RDB)和日志(AOF)两种持久化方式。
  • 分布式:支持主从复制、哨兵模式和集群模式。
  • 多语言支持:提供多种编程语言的客户端库。

开发应用场景

  1. 缓存:加速热点数据访问,减轻数据库压力。
  2. 会话存储:存储用户会话信息,支持分布式系统。
  3. 消息队列:通过 LPUSH/BRPOP 实现简单的消息队列。
  4. 排行榜:利用有序集合(ZSET)实现实时排名。

集群与高可用

  • 主从复制:通过 replicaof 配置从节点同步主节点数据。
  • 哨兵模式:监控主节点故障并自动切换。
  • 集群模式:分片存储数据,支持水平扩展。

单线程环境下实现 Key-Value 存储

在单线程环境中实现 Key-Value 存储通常可以通过简单的数据结构完成,例如字典或哈希表。

单线程 Key-Value 存储的特点:

  • 无并发竞争:由于是单线程操作,无需考虑多线程环境下的锁机制。
  • 简单高效:直接使用语言内置的数据结构(如字典),性能较高。
  • 功能局限:缺乏持久化、事务等高级特性。

在Django中集成Redis


1. 安装django_redis
pip install django_redis

2. 配置settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}
USER_AGENTS_CACHE = 'default'
3. 启动redis-server
sudo redis-server /etc/redis/redis.conf

4.检验进程是否启动

使用top命令查看是否有redis-server进程

5.可选择使用shell方式,也可代码执行

shell方式:python3  manage.py shell

Django 中通过缓存框架或 django_redis 提供的工具类操作 Redis,无需直接写 Shell 命令。

6.redis的相关代码

# 在视图、模型或管理脚本中使用
from django.core.cache import cache# 1. 存储数据(支持多种类型:字符串、字典、列表等)
cache.set('username', 'django_user', 60)  # 60秒过期
cache.set('user_info', {'id': 1, 'name': 'test'}, 300)  # 存储字典# 2. 获取数据
username = cache.get('username')  # 不存在返回 None
user_info = cache.get('user_info', default={'id': 0})  # 自定义默认值# 3. 批量操作
cache.set_many({'a': 1,'b': 2
}, 60)  # 批量存储,统一过期时间
data = cache.get_many(['a', 'b'])  # 批量获取,返回字典# 4. 删除数据
cache.delete('username')  # 删除单个键
cache.delete_many(['a', 'b'])  # 批量删除
cache.clear()  # 清空所有缓存(谨慎!)# 5. 原子操作(自增/自减,适用于计数器)
cache.incr('visit_count')  # 自增 1
cache.decr('visit_count', 2)  # 自减 2

shell下也支持正则表达式

cache.keys(' * ')

cache.delete(' 某内容 ')

cache.set(state, True,720)

http://www.lryc.cn/news/627105.html

相关文章:

  • 项目1其二(验证码、jwt)
  • Python如何将两个列表转化为一个字典
  • Spring Boot 实战:从项目搭建到部署优化
  • react state变化生命周期钩子
  • 【ansible】4.实施任务控制
  • VMware Workstation | 安装Ubuntu20.04.5
  • Linux基础介绍-3——第一阶段
  • 领码方案:通用物联网数据采集低代码集成平台——万物智联时代的黄金钥匙
  • 解决 nginx: [warn] “ssl_stapling“ ignored, issuer certificate not found 报错
  • 计算机视觉 图片处理 在骨架化过程中,每次迭代都会从图像的边缘移除一层像素,直到只剩下单像素宽度的骨架
  • RAG优化进阶 - LinkAI智能体平台的知识库落地实践
  • 数据库架构开发知识库体系
  • 【JavaEE】(17) MyBatis 基础
  • 趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!
  • sourcetree 拉取代码
  • HTML--pre标签的作用
  • SpringCloud微服务架构入门指南
  • 8 webUI中-Controlnet(控制与约束)的应用分类与使用方法
  • CentOS 系统 Java 开发测试环境搭建手册
  • 用倒计时软件为考研备考精准导航 复习 模拟考试 日期倒计时都可以用
  • E10 通过RPC实现账号批量锁定与解锁
  • 宝塔部署 Nuxt3
  • 透传 Attributes(详细解析)1
  • 新手向:Python制作简易音乐播放器
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)
  • PyTorch 深度学习常用函数总结
  • Dify 从入门到精通(第 45/100 篇):Dify 的外部系统集成
  • AI 伦理的 “灰色地带”:当算法拥有决策权,公平与隐私该如何平衡?
  • 【C++】模版(初阶)
  • C++ std::optional 深度解析与实践指南