1. 程式人生 > 資料庫 >python3實現將json物件存入Redis以及資料的匯入匯出

python3實現將json物件存入Redis以及資料的匯入匯出

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',RedisTT().r.llen('someexpert')))
 print(RedisTT().r.lrange('frameworks',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以及資料的匯入匯出就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。