python3实现将json对象存入Redis以及数据的导入导出


Posted in Python onJuly 16, 2020

Redis数据类型

String:二进制安全,可以包含任何数据

Hash:一个键值(key=>value)对集合

List:简单的字符串列表

Set:string类型的无序集合

Zset:每个元素都会关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序

Redis基本命令

Key: set, get, delete

Hash: hmset, hget, hdel

List: lpush, lindex

Set: sadd,smembers

Zset: zadd, zrange

具体用法可查看网上教程或官方文档或命令行提示

Redis持久化

Redis运行在内存中,但它同样提供了持久化机制

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

RDB:生成数据集的时间点快照

手动让Redis进行数据集保存:save

打开AOF功能:修改配置文件 appendonly yes

Labwork

针对数据库第十次上机作业进行一些总结

作业要求是将以下两个json对象存入Redis

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

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

我在储存过程中全部是以python中的list形式转化为json进行储存的

初始化

在初始化前,我们首先需要在终端开启数据库,具体方法可以参考macOS上Redis的安装与测试

首先我们需要导入redis模块

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

直接pip安装即可

pip3 install redis

接下来就是初始化数据库了,host是redis主机使用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用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

redis基本命令

增加list

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')))

输出结果

python3实现将json对象存入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

导出得到的文件数据:

python3实现将json对象存入Redis以及数据的导入导出

redis-load还原数据

将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 相关文章推荐
Python标准库之Sys模块使用详解
May 23 Python
Python字符串格式化
Jun 15 Python
Python中list初始化方法示例
Sep 18 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
python中如何使用虚拟环境
Oct 14 Python
Python使用MapReduce进行简单的销售统计
Apr 22 Python
Python必须了解的35个关键词
Jul 16 #Python
Python子进程subpocess原理及用法解析
Jul 16 #Python
python redis存入字典序列化存储教程
Jul 16 #Python
Python是怎样处理json模块的
Jul 16 #Python
Python2手动安装更新pip过程实例解析
Jul 16 #Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 #Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 #Python
You might like
MySQL相关说明
2007/01/15 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
JavaScript函数节流的两种写法
2017/04/07 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
python range实例用法分享
2020/02/06 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
中班上学期幼儿评语
2014/04/30 职场文书
岳麓书院导游词
2015/02/03 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python