溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python3如何將json對象存入Redis

發(fā)布時間:2020-07-16 15:01:44 來源:億速云 閱讀:916 作者:小豬 欄目:開發(fā)技術(shù)

小編這次要給大家分享的是python3如何將json對象存入Redis,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

Redis數(shù)據(jù)類型

String:二進(jìn)制安全,可以包含任何數(shù)據(jù)

Hash:一個鍵值(key=>value)對集合

List:簡單的字符串列表

Set:string類型的無序集合

Zset:每個元素都會關(guān)聯(lián)一個double類型的分?jǐn)?shù),redis通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序

Redis基本命令

Key: set, get, delete

Hash: hmset, hget, hdel

List: lpush, lindex

Set: sadd,smembers

Zset: zadd, zrange

具體用法可查看網(wǎng)上教程或官方文檔或命令行提示

Redis持久化

Redis運(yùn)行在內(nèi)存中,但它同樣提供了持久化機(jī)制

AOF:記錄服務(wù)器執(zhí)行的所有寫操作命令,并在服務(wù)器啟動時,通過重新執(zhí)行這些命令來還原數(shù)據(jù)集

RDB:生成數(shù)據(jù)集的時間點(diǎn)快照

手動讓Redis進(jìn)行數(shù)據(jù)集保存:save

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

Labwork

針對數(shù)據(jù)庫第十次上機(jī)作業(yè)進(jìn)行一些總結(jié)

作業(yè)要求是將以下兩個json對象存入Redis

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

var frameworks=[
 ‘vue',
 ‘react',
 ‘a(chǎn)ngular'
]

我在儲存過程中全部是以python中的list形式轉(zhuǎn)化為json進(jìn)行儲存的

初始化

在初始化前,我們首先需要在終端開啟數(shù)據(jù)庫,具體方法可以參考macOS上Redis的安裝與測試

首先我們需要導(dǎo)入redis模塊

import redis # 導(dǎo)入redis模塊,通過python操作redis 也可以直接在redis主機(jī)的服務(wù)端操作緩存數(shù)據(jù)庫

直接pip安裝即可

pip3 install redis

接下來就是初始化數(shù)據(jù)庫了,host是redis主機(jī)使用localhost即可,需要redis服務(wù)端和客戶端都啟動,redis默認(rèn)端口是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用于實(shí)現(xiàn)Redis的命令,StrictRedis用于實(shí)現(xiàn)大部分官方的命令,并使用官方的語法和命令,Redis是StrictRedis的子類,用于向后兼容舊版本的redis-py。

redis基本命令

增加list

lpush(name,values)

在name對應(yīng)的list中添加元素,每個新的元素都添加到列表的最左邊,沒有就新建

檢查名字是否存在

exists(name)

檢測redis的name是否存在,存在返回True,否則返回False

刪除

delete(*names)

根據(jù)刪除redis中的任意數(shù)據(jù)類型(string、hash、list、set、有序set)

列表長度

llen(name)

返回列表的長度。如果列表name不存在,則name被解釋為一個空列表,返回0。如果name不是列表類型,返回一個錯誤。

獲取指定列表指定區(qū)間元素

lrange(name, start, end)

返回列表中指定區(qū)間內(nèi)的元素。

區(qū)間以偏移量start和end指定。 其中0表示列表的第一個元素,1表示列表的第二個元素,以此類推;也可以使用負(fù)數(shù)下標(biāo),以-1表示列表的最后一個元素,-2表示列表的倒數(shù)第二個元素,以此類推。

參考代碼

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

輸出結(jié)果

python3如何將json對象存入Redis

導(dǎo)出rdb

安裝redis-dump

gem install redis-dump -V

redis-dump導(dǎo)出數(shù)據(jù)

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

導(dǎo)出redis 默認(rèn)數(shù)據(jù)庫的數(shù)據(jù),默認(rèn)數(shù)據(jù)庫為0,得到的db.rdb文件位于當(dāng)前目錄

如果指定15數(shù)據(jù)庫的數(shù)據(jù):

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

導(dǎo)出得到的文件數(shù)據(jù):

python3如何將json對象存入Redis

redis-load還原數(shù)據(jù)

將db.rdb文件上傳到新的redis服務(wù)器上,進(jìn)入到db.rdb目錄,執(zhí)行命令

< db.rdb redis-load;

或者

cat db.rdb | redis-load

如果導(dǎo)出時指定了數(shù)據(jù)庫

cat db.rdb | redis-load –d 15

看完這篇關(guān)于python3如何將json對象存入Redis的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI