Redis开发实践

在现代开发中,Redis 已经成为一种重要的高性能内存数据库。无论是作为缓存、消息队列还是排行榜的实现工具,它都表现出了极高的性能和灵活性。本文将带你了解 Redis 的基本概念,并通过 Python 示例代码实现 Redis 的核心功能。

文章目录

    • 1. Redis概述
      • 核心特点
    • 2. 环境准备
      • 安装 Redis
      • 安装 Python Redis 客户端
    • 3. Redis 基础操作(Python 实现)
      • 3.1 连接 Redis
      • 3.2 字符串操作
        • 使用场景
        • Python 示例
      • 3.3 列表操作
        • 使用场景
        • Python 示例
      • 3.4 哈希操作
        • 使用场景
        • Python 示例
      • 3.5 有序集合操作
        • 使用场景
        • Python 示例
    • 4. Redis 进阶功能(Python 实现)
      • 4.1 发布订阅(Pub/Sub)
        • 使用场景
        • Python 示例
      • 4.2 分布式锁
        • 使用场景
        • Python 示例
      • 4.3 持久化
    • 5. 性能优化与最佳实践
    • 6. 总结


1. Redis概述

Redis 是一个开源的内存数据结构存储,支持多种数据结构(字符串、哈希、列表、集合、有序集合等),并提供高效的读写性能。它既可以作为缓存,也可以作为持久化存储的一部分。

核心特点

  • 高性能:基于内存操作,延迟通常低于 1 毫秒。
  • 丰富的数据结构:支持字符串、列表、集合等多种结构。
  • 多功能:支持持久化、消息发布订阅、Lua 脚本等。
  • 分布式支持:通过 Redis Cluster 提供分布式存储。

2. 环境准备

安装 Redis

  1. 从 Redis 官网 下载并安装 Redis。
  2. 启动 Redis 服务:
    redis-server
    

安装 Python Redis 客户端

使用 redis-py 库来与 Redis 进行交互:

pip install redis

3. Redis 基础操作(Python 实现)

以下是 Redis 的基础操作以及对应的 Python 实现代码。

3.1 连接 Redis

from redis import Redis# 连接 Redis
redis_client = Redis(host="xxxx",port=6379,password="xxxx",decode_responses=True)
# 测试连接
try:redis_client.ping()print("成功连接到 Redis!")
except redis.ConnectionError:print("连接 Redis 失败,请检查服务是否启动。")

3.2 字符串操作

使用场景
  • 缓存简单的键值对,如用户信息、配置项。
Python 示例
# 设置键值对
redis_client.set("username", "Alice")
print("设置用户名:", redis_client.get("username"))# 设置带过期时间的键
redis_client.setex("temp_key", 10, "This will expire in 10 seconds")
print("临时键值:", redis_client.get("temp_key"))

3.3 列表操作

使用场景
  • 实现队列或栈功能。
Python 示例
# 左侧推入列表
redis_client.lpush("tasks", "task1", "task2", "task3")
print("当前任务列表:", redis_client.lrange("tasks", 0, -1))# 从右侧弹出一个任务
completed_task = redis_client.rpop("tasks")
print("完成任务:", completed_task)
print("剩余任务列表:", redis_client.lrange("tasks", 0, -1))

3.4 哈希操作

使用场景
  • 存储用户信息、对象属性等结构化数据。
Python 示例
# 设置哈希值
redis_client.hset("user:1001", mapping={"name": "Alice", "age": "30", "city": "New York"})
print("用户信息:", redis_client.hgetall("user:1001"))# 更新哈希值
redis_client.hset("user:1001", "age", "31")
print("更新后用户信息:", redis_client.hgetall("user:1001"))

3.5 有序集合操作

使用场景
  • 实现排行榜功能。
Python 示例
# 添加有序集合
redis_client.zadd("leaderboard", {"Alice": 100, "Bob": 95, "Charlie": 120})
print("排行榜:", redis_client.zrange("leaderboard", 0, -1, withscores=True))# 获取指定排名的用户
print("排名第一的用户:", redis_client.zrevrange("leaderboard", 0, 0, withscores=True))

4. Redis 进阶功能(Python 实现)

4.1 发布订阅(Pub/Sub)

使用场景
  • 实现实时消息通知或事件驱动系统。
Python 示例
# 发布消息
def publisher():redis_client.publish("news", "Breaking News: Python is awesome!")# 订阅消息
def subscriber():pubsub = redis_client.pubsub()pubsub.subscribe("news")for message in pubsub.listen():if message["type"] == "message":print(f"收到消息:{message['data']}")# 示例调用
import threadingthreading.Thread(target=subscriber).start()
publisher()

4.2 分布式锁

使用场景
  • 保证多进程或多实例间的互斥访问。
Python 示例
import timelock_key = "resource_lock"# 获取锁
if redis_client.set(lock_key, "locked", ex=10, nx=True):print("成功获取锁!")time.sleep(5)  # 模拟资源访问redis_client.delete(lock_key)  # 释放锁print("锁已释放")
else:print("未能获取锁,资源已被占用。")

4.3 持久化

Redis 提供两种持久化方式:

  1. RDB(快照):将内存数据定期保存到磁盘。
  2. AOF(Append-Only File):将每次写操作记录到日志文件。

配置文件中可启用:

save 900 1
appendonly yes

5. 性能优化与最佳实践

  1. 缓存策略

    • 设置合适的过期时间(EX)。
    • 使用 maxmemory-policy 控制内存淘汰策略(如 LRU)。
  2. 避免缓存穿透、击穿和雪崩

    • 穿透:为不存在的数据设置空值缓存。
    • 击穿:使用锁机制防止大量并发请求直接访问数据库。
    • 雪崩:为缓存设置随机过期时间,避免同时失效。
  3. 使用 Pipeline

    • 批量操作以减少网络延迟。
 pipe = redis_client.pipeline()for i in range(1, 6):pipe.set(f"key{i}", f"value{i}")pipe.execute()

6. 总结

Redis 是一个功能强大且灵活的内存数据库,适用于多种场景,如缓存、队列、排行榜等。通过本文,你可以快速上手 Redis 的基本操作,并用 Python 实现其核心功能。未来,可以进一步探索 Redis 的集群模式、哨兵机制和高级功能,进一步优化你的系统。


如果你对 Redis 和 Python 的结合有更多兴趣,可以参考 Redis 官方文档 和 redis-py 库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.建立本地仓库及常用命令

1.建立本地仓库 要使用Git对我们的代码进行版本控制,首先需要获得本地仓库 1)在电脑的任意位置创建一个空目录,作为我们的本地Git仓库 2)进入这个目录,右键点击Git Bash 窗口 3)执行命令git init 4) 如果创…

Narya.ai正在寻找iOS工程师!#Mixlab内推

如果你对AI技术和iOS开发充满热情,这里有一个绝佳的机会加入一家专注于AI应用创新的初创公司。Narya.ai正在招聘iOS工程师,帮助他们开发下一代效率工具,旨在提升用户的日常生活效率与幸福感。 关于Narya.ai: 专注于AI应用层创新&a…

AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习

阶段1:GAN是个啥? 生成式对抗网络(Generative Adversarial Networks, GAN),名字听着就有点“对抗”的意思,没错!它其实是两个神经网络互相斗智斗勇的游戏: 生成器(Gene…

039集——渐变色之:CAD中画彩虹()(CAD—C#二次开发入门)

(来左边儿 跟我一起画个龙,在你右边儿 画一道彩虹 ~~~~~~~~~~~ ) 效果如下: 以下展示部分颜色源码: namespace AcTools {public class Class1{public Wform.Timer timer;//定时器需建在类下面public s…

C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…

web vue 滑动选择 n宫格选中 九宫格选中

页面动态布局经常性要交给客户来操作,他们按时他们的习惯在同一个屏幕内显示若干个子视图,尤其是在医学影像领域对于影像的同屏显示目视对比显的更为重要。 来看看如下的用户体验: 设计为最多支持5行6列页面展示后,右侧的布局则动…

解决idea使用maven打包时无法将本地lib库文件和resource目录中的资源文件打包进jar文件的问题!!!

一、问题复现 1)项目结构如下 我们看到项目中手动添加了本地lib资源,同时bootspring的配置文件和mapper文件也放在了resouces目录中。 2)上述结构的项目在使用maven打包时,最终生成的jar文件中将不包含lib库文件,甚…

【短视频矩阵系统==saas技术开发】

在数字媒体领域,短视频的崛起已不可忽视。对于商业实体而言,掌握如何通过短视频平台有效吸引潜在客户并提高转化率,已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制,以期为企业提供一套系统化的策略&#xf…

C_字符串的一些函数

1.字符串输入函数 scanf("%s",数组名)&#xff1b; gets(数组名)&#xff1b; 区别&#xff1a; scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入&#xff1a;");scanf("%s",a)…

JavaScript实现tab栏切换

JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡&#xff08;Tab&#xff09;切换功能。它通过操作 HTML 元素的类名&#xff08;class&#xff09;来控制哪些选项卡&#xff08;Tab&#xff09;和对应的内容板块显示&#xff0c;哪些隐藏。基本思路是先…

《网络聊天室项目:全面分析测试报告》

目录 一、项目介绍二、项目功能三、测试计划1. 编写测试用例2. 实际执行测试的部分操作步骤3. 自动化测试 四、项目bug&#xff08;1&#xff09;bug描述&#xff08;2&#xff09;bug描述 五、项目总结 一、项目介绍 网络聊天室项目实现了一个网络交流平台&#xff0c;用户在w…

大数据新视界 -- 大数据大厂之 Hive 数据压缩:优化存储与传输的关键(上)(19/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳&#xff0c;首届鸿蒙生态大会上&#xff0c;软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟&#xff08;GIIC&#xff09;理事单位、鸿蒙生态服务&#xff08;深圳&#xff09;有限公司战略合作伙伴&#xff0c;联合软通教育深度参与了大会多项重磅…

动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)

本节课程地址&#xff1a;多头注意力代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %

用html+jq实现元素的拖动效果——js基础积累

用htmljq实现元素的拖动效果 效果图如下&#xff1a; 将【item10】拖动到【item1】前面 直接上代码&#xff1a; html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …

单片机学习笔记 12. 定时/计数器_定时

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

计算机视觉硬件知识点整理六:工业相机选型

文章目录 前言一、工业数字相机的分类二、相机的主要参数三、工业数字摄像机主要接口类型四、选择工业相机的考量因素六、实例分析 前言 随着科技的不断进步&#xff0c;工业自动化领域正经历着前所未有的变革。作为工业自动化的重要组成部分&#xff0c;工业相机在工业检测、…

如何使用brew安装phpredis扩展?

如何使用brew安装phpredis扩展&#xff1f; phpredis扩展是一个用于PHP语言的Redis客户端扩展&#xff0c;它提供了一组PHP函数&#xff0c;用于与Redis服务器进行交互。 1、cd到php某一版本的bin下 /usr/local/opt/php8.1/bin 2、下载 phpredis git clone https://githu…

硬件看门狗工作原理

硬件看门狗是什么&#xff1f; 硬件看门狗&#xff08;Hardware Watchdog&#xff09;是一种用于监控系统运行状态的硬件设备或电路。它的主要功能是检测系统是否正常运行&#xff0c;并在系统出现故障或无响应时自动重启或采取其他恢复措施。 工作原理与引脚 硬件看门狗一般…