Python3操作Redis:JSON对象存储与数据导入导出实战
本文详细介绍如何使用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以及进行数据导入导出的完整流程,供读者参考。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













