Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python Redis数据库新玩法:从零到高手掌握操作技巧

Python Redis数据库新玩法:从零到高手掌握操作技巧

原创
作者头像
子午Python
发布于 2023-08-17 04:31:00
发布于 2023-08-17 04:31:00
69600
代码可运行
举报
文章被收录于专栏:Python项目Python项目
运行总次数:0
代码可运行

介绍

Redis(Remote Dictionary Server)是一种高性能的开源内存数据库,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的操作命令。Redis具有快速、可靠和灵活的特点,广泛应用于缓存、消息队列、会话存储、计数器等场景。本文将从入门到精通地介绍Python中操作Redis数据库的方法,带你掌握使用Redis进行数据存储和读取的技巧。

1. 安装和导入

首先,我们需要安装Redis数据库。可以从Redis官网下载安装包进行安装,或者使用包管理工具进行安装。

安装完成后,我们需要在Python中导入redis模块来操作Redis数据库:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

2. 连接Redis数据库

在使用Redis之前,我们需要先建立与Redis服务器的连接。可以使用redis.Redis()方法创建一个Redis客户端对象,然后通过该对象进行数据的存储和读取。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

# 建立与本地Redis服务器的连接
client = redis.Redis(host='localhost', port=6379, db=0)

# 存储数据
client.set('name', 'Alice')

# 读取数据
value = client.get('name')
print(value.decode())

在上述代码中,我们使用redis.Redis()方法创建了一个与本地Redis服务器的连接,并使用client.set()方法存储了一个键值对,然后使用client.get()方法读取了数据,并通过decode()方法将二进制数据转换为字符串输出。

3. 字符串操作

Redis的字符串数据结构是最基本的数据类型,可以用来存储字符串、整数、浮点数等。

存储和读取字符串

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储字符串
client.set('name', 'Alice')

# 读取字符串
value = client.get('name')
print(value.decode())

增加和减少整数

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储整数
client.set('counter', 10)

# 增加整数
client.incr('counter', 5)

# 读取整数
value = client.get('counter')
print(int(value))

设置过期时间

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储字符串,并设置过期时间为10秒
client.setex('name', 10, 'Alice')

# 读取字符串
value = client.get('name')
print(value.decode())

# 等待11秒后,再次读取数据
import time
time.sleep(11)
value = client.get('name')
print(value)  # 过期后返回None

在上述代码中,我们使用client.setex()方法存储了一个带有过期时间的键值对,过期时间为10秒。等待11秒后,再次读取数据,发现键已经过期,返回了None。

4. 哈希操作

哈希是一种键值对的集合,适合存储对象。

存储和读取哈希

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储哈希
client.hset('user', 'name', 'Alice')
client.hset('user', 'age', 30)

# 读取哈希
name = client.hget('user', 'name')
age = client.hget('user', 'age')
print(name.decode(), age.decode())

获取所有键值对

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储哈希
client.hset('user', 'name', 'Alice')
client.hset('user', 'age', 30)

# 获取所有键值对
data = client.hgetall('user')
for key, value in data.items():
    print(key.decode(), value.decode())

5. 列表操作

列表是一种有序的字符串列表,可以存储重复的值。

存储和读取列表

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储列表
client.lpush('fruits', 'apple', 'orange', 'banana')

# 读取列表
fruits = client.lrange('fruits', 0, -1)
for fruit in fruits:
    print(fruit.decode())

获取列表长度

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储列表
client.lpush('fruits', 'apple', 'orange', 'banana')

# 获取列表长度
length = client.llen('fruits')
print(length)

弹出元素

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储列表
client.lpush('fruits', 'apple', 'orange', 'banana')

# 弹出元素
fruit = client.lpop('fruits')
print(fruit.decode())

# 再次读取列表
fruits = client.lrange('fruits', 0, -1)
for fruit in fruits:
    print(fruit.decode())

6. 集合操作

集合是一种无序的、不重复的字符串集合。

存储和读取集合

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储集合
client.sadd('fruits', 'apple', 'orange', 'banana')

# 读取集合
fruits = client.smembers('fruits')
for fruit in fruits:
    print(fruit.decode())

获取集合大小

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储集合
client.sadd('fruits', 'apple', 'orange', 'banana')

# 获取集合大小
size = client.scard('fruits')
print(size)

判断元素是否在集合中

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储集合
client.sadd('fruits', 'apple', 'orange', 'banana')

# 判断元素是否在集合中
print(client.sismember('fruits', 'apple'))
print(client.sismember('fruits', 'watermelon'))

7. 有序集合操作

有序集合是一种有序的、不重复的字符串集合,每个元素都有一个分数,可以根据分数进行排序。

存储和读取有序集合

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储有序集合
client.zadd('fruits', {'apple': 1, 'orange': 2, 'banana': 3})

# 读取有序集合
fruits = client.zrange('fruits', 0, -1, withscores=True)
for fruit, score in fruits:
    print(fruit.decode(), score)

获取元素排名和分数

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储有序集合
client.zadd('fruits', {'apple': 1, 'orange': 2, 'banana': 3})

# 获取元素排名和分数
rank = client.zrank('fruits', 'banana')
score = client.zscore('fruits', 'banana')
print(rank, score)

获取分数在范围内的元素

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储有序集合
client.zadd('fruits', {'apple': 1, 'orange': 2, 'banana': 3})

# 获取分数在范围内的元素
fruits = client.zrangebyscore('fruits', 1, 2, withscores=True)
for fruit, score in fruits:
    print(fruit.decode(), score)

8. 发布订阅模式

Redis支持发布订阅模式,可以将消息发布给多个订阅者。

发布消息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 发布消息
client.publish('channel', 'Hello, subscribers!')

订阅消息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

class Subscriber(redis.client.PubSub):

    def on_message(self, message):
        print('Received message:', message['data'].decode())

client = redis.Redis(host='localhost', port=6379, db=0)
subscriber = Subscriber()

# 订阅消息
subscriber.subscribe('channel')
client.publish('channel', 'Hello, subscribers!')  # 这里将收到消息

9. 事务操作

Redis支持事务操作,可以将多个命令放在一个事务中进行执行。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 开启事务
with client.pipeline() as pipe:
    try:
        # 监听键值变化
        pipe.watch('counter')

        # 事务开始
        pipe.multi()

        # 执行多个命令
        pipe.incr('counter')
        pipe.incr('counter')
        pipe.incr('counter')

        # 执行事务
        pipe.execute()
    except redis.exceptions.WatchError:
        print('Counter value changed during transaction, transaction aborted.')

在上述代码中,我们使用client.pipeline()创建了一个事务管道,并使用pipe.watch()方法监听了一个键,然后在pipe.multi()和pipe.execute()之间执行了多个命令。如果在事务执行期间,被监听的键的值发生了变化,redis.exceptions.WatchError异常将会被抛出,表示事务被中止。

10. 过期时间和持久化

设置过期时间

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 存储字符串,并设置过期时间为10秒
client.setex('name', 10, 'Alice')

持久化

Redis支持将数据持久化到磁盘中,以防止数据丢失。

RDB持久化
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 执行保存操作
client.save()
AOF持久化
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 执行保存操作
client.bgsave()

11. 性能优化

在大规模使用Redis时,需要考虑性能优化的问题。

使用连接池

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

# 建立与本地Redis服务器的连接池
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
client = redis.Redis(connection_pool=pool)

使用管道

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 使用管道执行多个命令
with client.pipeline() as pipe:
    pipe.set('name', 'Alice')
    pipe.get('name')
    results = pipe.execute()
    print(results)

使用批量操作

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 使用批量操作
client.mset({'name': 'Alice', 'age': 30})
data = client.mget('name', 'age')
print(data)

12. 分布式锁

分布式锁是在分布式系统中实现并发控制的一种机制。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

client = redis.Redis(host='localhost', port=6379, db=0)

# 获取锁
lock = client.lock('my_lock')

# 阻塞方式获取锁
with lock:
    print('Lock acquired.')

    # 非阻塞方式获取锁
if lock.acquire(blocking=False):
    print('Lock acquired.')
else:
    print('Failed to acquire lock.')

13. Redis主从复制

Redis支持主从复制,可以将主节点的数据复制到从节点。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

# 创建主节点连接
master = redis.Redis(host='localhost', port=6379, db=0)

# 创建从节点连接
slave = master.slaveof()

# 查看从节点信息
info = slave.info()
print(info)

14. Redis哨兵

Redis哨兵用于监控Redis主从复制的状态,以实现高可用性。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import redis

# 创建哨兵连接
sentinel = redis.StrictRedis(host='localhost', port=26379, db=0)

# 获取主节点连接
master = sentinel.sentinel_get_master_addr_by_name('mymaster')
print(master)

15. Redis集群

Redis支持集群模式,可以将数据分布在多个节点上。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from rediscluster import StrictRedisCluster

# 创建集群节点连接
startup_nodes = [{'host': 'localhost', 'port': '7000'}, {'host': 'localhost', 'port': '7001'}]
client = StrictRedisCluster(startup_nodes=startup_nodes)

# 存储数据
client.set('name', 'Alice')

# 读取数据
value = client.get('name')
print(value.decode())

16. 总结

本文介绍了Python中操作Redis数据库的方法,包括连接Redis数据库、字符串操作、哈希操作、列表操作、集合操作、有序集合操作、发布订阅模式、事务操作、过期时间和持久化、性能优化、分布式锁、Redis主从复制、Redis哨兵和Redis集群。掌握这些知识,你将能够灵活运用Redis数据库来处理数据,提高系统的性能和可靠性。希望本文能帮助你学习和使用Redis,在实际项目中发挥更大的作用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用python来操作redis用法详解 转
连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。
双面人
2019/05/21
2.5K0
【详解】Redis常用命令集合
Redis(Remote Dictionary Server)是一个开源的、基于键值对存储的NoSQL数据库,它支持多种数据结构如字符串(String)、哈希(Hash)、列表(List)、集合(Set)及有序集合(Sorted Set)。Redis因其高性能、丰富的功能和灵活的数据模型而被广泛应用于缓存、消息队列、会话存储等场景。
大盘鸡拌面
2025/01/07
1.5K0
Python操作redis数据库
前言:这两天的事情不多,为了避免之前学习的一点点Python知识遗忘,我在Github上找了一些小项目跟着实践。之前的工作有写过相关的Python处理redis处理数据的脚本,但之前没有养成记录积累的习惯,所以~~~~(遗忘了),所以趁此机会学习一下Python操作redis。 安装:
py3study
2020/01/16
5390
【数据库】深入Redis与Python操作指南:高效内存存储与应用场景解析
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储数据库,支持多种数据结构,具有高性能、持久化等特点。它常被称为 "NoSQL" 数据库之一,专为快速访问和处理大量数据设计,广泛应用于缓存、实时分析、消息队列等场景。
易辰君
2024/11/07
3470
pyRedis - 操作指南:增/删/改/查、管道与发布订阅功能
首先拉取 Redis 镜像, 这里我选择的是 redis:alpine 轻量级镜像版本:
悟乙己
2020/03/27
1.3K0
Redis数据库入门指南
在当今的数据驱动时代,数据库的选择对于应用程序的性能、可扩展性和功能实现起着至关重要的作用。Redis作为一款高性能的键值对存储数据库,正逐渐在众多领域崭露头角。
炒香菇的书呆子
2024/12/01
3030
【Python全栈100天学习笔记】Day39 NoSQL入门及Redis概述
如今,大多数的计算机系统(包括服务器、PC、移动设备等)都会产生庞大的数据量。其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,
天道Vax的时间宝藏
2022/04/02
2420
【Python全栈100天学习笔记】Day39 NoSQL入门及Redis概述
Python 爬虫之Redis数据库(干货)
30/10 周三 晴 1 Redis简介 Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis与其他 key - value 缓存产品有以下三个特点: R
Python知识大全
2020/02/13
1.3K0
Python 爬虫之Redis数据库(干货)
Python使用Redis数据库
Redis可以提供事务和持久化支持保证并发安全性,并提供TTL(time to life)服务.
菲宇
2022/12/21
7590
Python使用Redis数据库
Python操作redis数据库
  redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
马一特
2020/09/08
1.4K0
redis数据库的使用
redis载地址:https://github.com/MSOpenTech/redis/releases。
小小咸鱼YwY
2020/06/19
4990
Redis 介绍
watch 指令作用 实质:WATCH 只会在数据被其他客户端抢先修改了的情况下通知执行命令的这个客户端(通过 WatchError 异常)但不会阻止其他客户端对数据的修改
IT茂茂
2020/03/05
6440
Redis 介绍
Python操作Redis
redis-py模块用pipline(管道)的方式向Redis服务器传递批处理处理命令和执行事务
宇宙之一粟
2020/10/26
4120
Python 系列文章 —— Python redis 详解
redis import redis #导入redis模块 # 建议使用以下连接池的方式 # 设置decode_responses=True,写入的KV对中的V为string类型,不加则写入的为字节类型。 pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0, decode_responses=True) rs = redis.Redis(connection_pool=pool) # key="color",value="red
玩转编程
2022/01/15
3940
python之redis基本操作及设置键过期时间
redis在项目开发中通常会用来做缓存数据库, 用来缓存频繁读取的数据. 往往有些时候, 需要设置键自动删除, 来减少服务器内存占用. 这篇主要写一下如何使用python对redis的基本操作, 及使用多种方式设置键的过期时间. 这些方式允许你为键设置一个时间限制,一旦过期,Redis将自动删除该键。
不止于python
2023/09/18
1.3K0
python之redis基本操作及设置键过期时间
Python Redis
  NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
py3study
2020/01/09
7510
Redis 为什么这么快?深度解析性能的奥秘超级用心的图文版
Redis,即远程字典服务器(Remote Dictionary Server),是一个高性能的键值存储系统。它以出色的性能、可扩展性和持久性而著称,被广泛应用于缓存、会话存储、消息队列等领域。那么,Redis究竟为何如此之快?本文将深入探讨Redis的性能奥秘,解释它之所以如此出色的原因,并附上代码示例,帮助您更好地理解和利用Redis。
疯狂的KK
2023/09/06
1.9K0
Redis 为什么这么快?深度解析性能的奥秘超级用心的图文版
Python自动化开发学习11-Redi
缓存系统也可以叫缓存数据库,现在主流的系统有 Redis 和 Memcached : MongoDB,比较早的缓存系统,直接持久化到硬盘 Redis,现在正火的。半持久化数据,数据默认存在内存中,可以持久化到硬盘里持久保存。效率高,在单线程下运行,通过epoll实现的高并发 Memcached,轻量级的缓存系统,不能持久化只能存在内存中。相对应该比较简单,可以自学?
py3study
2020/01/07
7080
python操作redis简单例子
#2、配置  配置一下吧,默认配置文件在: “/etc/redis/redis.conf”  绑定ip:  “bind 127.0.0.1″ -> “bind 10.0.1.7″
bear_fish
2018/09/20
1.1K0
Python操作redis
1 .用户登录首先判断是否在redis缓存中,如果在redis缓存中,直接登录成功; 2 .若用户未在redis缓存,则访问Mysql,判断用户是否存在,如果不存在,则提示用户注册;如果存在,则登录成功; 3 .在Mysql存在并登录成功的同时,将改条数据用Redis Hash类型进行缓存,并设置过期时间为20分钟;
Python攻城狮
2018/08/23
1.1K0
Python操作redis
相关推荐
使用python来操作redis用法详解 转
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验