Python3操作Redis:JSON对象存储与数据导入导出实战

Oliver
Oliver
发布时间:2026-10-14 | 2人浏览过
原创

本文详细介绍如何使用Python3将JSON对象存入Redis数据库,涵盖StrictRedis初始化、List类型操作及常用命令。同时提供利用redis-dump工具进行RDB数据导出与导入的具体命令和步骤,适用于数据库上机作业及日常缓存管理场景。

Redis数据类型与基本命令

Redis支持多种数据类型,包括String、Hash、List、Set和Zset。

String类型是二进制安全的,可以存储任意格式的数据。

Hash类型用于存储键值对集合,适合存储对象。

List类型是简单的字符串列表,支持双向插入和弹出。

Set类型是string类型的无序集合,成员唯一且不可重复。

Zset(有序集合)中每个元素关联一个double类型的分数,Redis通过分数对成员进行从小到大排序。

掌握Redis基本命令是操作数据库的基础,不同数据类型对应不同的命令集。

String类型常用命令包括set、get和delete,用于设置、获取和删除键值。

Hash类型常用命令包括hmset、hget和hdel,用于批量设置、获取单个字段和删除字段。

List类型常用命令包括lpush和lindex,用于向左插入元素和获取指定索引的元素。

Set类型常用命令包括sadd和smembers,用于添加成员和获取所有成员。

Zset类型常用命令包括zadd和zrange,用于添加带分数的成员和获取指定范围的成员。

具体命令的详细用法可查阅官方文档、在线教程或直接在命令行中查看帮助提示。

Redis持久化机制

Redis虽然主要运行在内存中,但提供了持久化机制以防止数据丢失。

Redis提供了两种主要的持久化方式:AOF和RDB。

AOF(Append Only File)记录服务器执行的所有写操作命令,并在服务器启动时通过重新执行这些命令来还原数据集。

RDB(Redis Database)生成数据集在特定时间点的快照,适合定期备份。

可以通过执行save命令手动触发Redis进行数据集保存。

要开启AOF功能,需修改配置文件,将appendonly设置为yes。

Python3操作Redis实战

本节结合具体实验任务进行总结。

针对数据库课程的第十次上机作业内容进行梳理和总结。

作业核心要求是将两个特定的JSON对象存入Redis数据库中。


var someexpert={
 id:10000
 realname: ‘expert-a'
 organization:'BUAA'
}

var frameworks=[
 ‘vue',
 ‘react',
 ‘angular'
]

在存储过程中,所有数据均以Python中的list形式转换为JSON字符串后进行存储。

执行代码前需完成环境初始化。

在编写代码前,首先需要在终端启动Redis数据库,具体安装与测试方法可参考macOS上Redis的安装指南。

首先需要在Python环境中导入redis模块。

import redis # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

可以通过pip工具直接安装该模块。

pip3 install redis

接下来进行数据库初始化,host参数使用localhost即可,需确保Redis服务端和客户端均已启动,Redis默认端口号为6379。


def __init__(self):
  self.host = 'localhost'
  self.port = '6379'
  self.r = redis.StrictRedis(host=self.host, port=self.port)

许多教程推荐使用redis.Redis,但官方文档建议使用redis.StrictRedis。

redis库提供两个类:Redis和StrictRedis。StrictRedis用于实现大部分官方命令,并遵循官方语法和命令规范;Redis是StrictRedis的子类,主要用于向后兼容旧版本的redis-py。

以下是Redis的一些基本操作命令及其用法。

向列表中添加元素。

lpush(name,values)

在name对应的list中添加元素,每个新元素都添加到列表的最左边,如果列表不存在则新建。

检查键名是否存在。

exists(name)

检测redis中name键是否存在,存在返回True,否则返回False。

删除指定的键。

delete(*names)

根据提供的名称删除redis中的任意数据类型(包括string、hash、list、set、有序set)。

获取列表的长度。

llen(name)

返回列表的长度。如果列表name不存在,则name被解释为一个空列表,返回0。如果name不是列表类型,将返回一个错误。

获取指定列表在指定区间内的元素。

lrange(name, start, end)

返回列表中指定区间内的元素。

区间由偏移量start和end指定。其中0表示列表的第一个元素,1表示列表的第二个元素,以此类推;也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

以下是完整的参考代码示例。


# -*- coding=utf-8 -*-
__author__ = 'XJX'
__date__ = '2018.06.09'

"""
description:
 将json对象存入Redis
"""

import json
import redis

class RedisTT(object):
 def __init__(self):
  self.host = 'localhost'
  self.port = '6379'
  self.r = redis.StrictRedis(host=self.host, port=self.port)

 def insertRedis(self, keyName, jsonStr): # 存入到redis中
  self.r.lpush(keyName, jsonStr)

def save1():
 someexpert = {}
 someexpert['id'] = 10000
 someexpert['realname'] = 'expert-a'
 someexpert['organization'] = 'BUAA'
 if RedisTT().r.exists('someexpert'):
  RedisTT().r.delete('someexpert') # 删除key为someexpert的键值对
 RedisTT().insertRedis(keyName='someexpert', jsonStr=json.dumps(someexpert))

def save2():
 frameworks = ['vue', 'react', 'angular']
 if RedisTT().r.exists('frameworks'):
  RedisTT().r.delete('frameworks') # 删除key为frameworks的键值对
 RedisTT().insertRedis(keyName='frameworks', jsonStr=json.dumps(frameworks))

if __name__ == "__main__":
 save1()
 save2()

 print(RedisTT().r.lrange('someexpert', 0, RedisTT().r.llen('someexpert')))
 print(RedisTT().r.lrange('frameworks', 0, RedisTT().r.llen('frameworks')))

运行上述代码后的输出结果。

Redis数据导入与导出

将Redis中的数据导出为RDB文件。

首先需要安装redis-dump工具。

gem install redis-dump -V

使用redis-dump命令导出数据。

redis-dump –u 127.0.0.1:6379 > db.rdb

上述命令导出redis默认数据库(数据库0)的数据,生成的db.rdb文件位于当前执行目录。

如果需要指定导出其他数据库的数据,例如数据库15。

redis-dump –u 127.0.0.1:6379 –d 15 > db.rdb

查看导出的文件内容或准备还原数据。

使用redis-load命令将导出的rdb文件数据导入到新的Redis服务器。

将db.rdb文件上传到新的Redis服务器后,进入db.rdb所在目录,执行导入命令。

< db.rdb redis-load;

或者使用管道符执行。

cat db.rdb | redis-load

如果在导出时指定了特定的数据库编号,导入时也需要指定对应的数据库。

cat db.rdb | redis-load –d 15

以上即为使用Python3将JSON对象存入Redis以及进行数据导入导出的完整流程,供读者参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表