Python操作redis

1.python操作redis

1.安裝

  • 輸入命令:
pip  install redis

2.使用

引入模塊
import redis 連接

try: 
    r=redis.StrictRedis(host='localhost',port=6379) 
except Exception,e: 
    print e.message 

方式一:根據(jù)數(shù)據(jù)類型的不同,調(diào)用相應(yīng)的方法,完成讀寫
更多方法同上邊寫的命令
r.set('name','hello') 
r.get('name’) 

方式二:pipline
緩沖多條命令,然后一次性執(zhí)行,減少服務(wù)器-客戶端之間TCP數(shù)據(jù)庫包,從而提高效率
pipe = r.pipeline() 
pipe.set('name', 'world') 
pipe.get('name') 
pipe.execute() 
  • 封裝
#連接redis服務(wù)器部分是一致的
#這里將string類型的讀寫進(jìn)行封裝
import redis 
class RedisHelper(): 
    def __init__(self,host='localhost',port=6379): 
        self.__redis = redis.StrictRedis(host, port) 
        
    def get(self,key):
        if self.__redis.exists(key): 
            return self.__redis.get(key) 
        else: 
            return "" 
    
    def set(self,key,value): 
        self.__redis.set(key,value)

2.實(shí)例

#coding=utf-8 
import redis 
class CRedis: 
  def __init__(self): 
    self.host = 'localhost'
    self.port = 6379
    self.db = 0
    self.r = redis.Redis(host = self.host, port = self.port, db = self.db) 
  
#1. strings 類型及操作 
  #設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value 
  def set(self, key, value): 
    return self.r.set(key, value) 
  #設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value。如果 key 已經(jīng)存在,返回 0,nx 是 not exist 的意思 
  def setnx(self, key, value): 
    return self.r.setnx(key, value) 
  #設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value,并指定此鍵值對(duì)應(yīng)的有效期 
  def setex(self, key, time, value): 
    return self.r.setex(key, time, value) 
  #設(shè)置指定 key 的 value 值的子字符串 
  #setrange name 8 gmail.com 
  #其中的 8 是指從下標(biāo)為 8(包含 8)的字符開始替換 
  def setrange(self, key, num, value): 
    return self.r.setrange(key, num, value) 
  #獲取指定 key 的 value 值的子字符串 
  def getrange(self, key, start ,end): 
    return self.r.getrange(key, start, end) 
  #mget(list) 
  def get(self, key): 
    if isinstance(key, list): 
      return self.r.mget(key) 
    else: 
      return self.r.get(key) 
  #刪除 
  def remove(self, key): 
    return self.r.delete(key) 
  #自增 
  def incr(self, key, default = 1): 
    if (1 == default): 
      return self.r.incr(key) 
    else: 
      return self.r.incr(key, default) 
  #自減 
  def decr(self, key, default = 1): 
    if (1 == default): 
      return self.r.decr(key) 
    else: 
      return self.r.decr(key, default) 
  
#2. hashes 類型及操作 
  #根據(jù)email獲取session信息 
  def hget(self, email): 
    return self.r.hget('session', email) 
  #以email作為唯一標(biāo)識(shí),增加用戶session 
  def hset(self, email, content): 
    return self.r.hset('session', email, content) 
  #獲取session哈希表中的所有數(shù)據(jù) 
  def hgetall(self): 
    return self.r.hgetall('session') 
  #刪除hashes 
  def hdel(self, name, key = None): 
    if(key): 
      return self.r.hdel(name, key) 
    return self.r.hdel(name) 
  #清空當(dāng)前db 
  def clear(self): 
    return self.r.flushdb() 
 
#3、lists 類型及操作 
  #適合做郵件隊(duì)列 
  #在 key 對(duì)應(yīng) list 的頭部添加字符串元素 
  def lpush(self, key ,value): 
    return self.r.lpush(key, value) 
  #從 list 的尾部刪除元素,并返回刪除元素 
  def lpop(self, key): 
    return self.r.plush(key) 

if __name__ == '__main__': 
  r = CRedis()

3.Redis緩存Mysql模擬用戶登錄,Python實(shí)現(xiàn)實(shí)例

  • 整體邏輯如下:


1 .用戶登錄首先判斷是否在redis緩存中,如果在redis緩存中,直接登錄成功;
2 .若用戶未在redis緩存,則訪問Mysql,判斷用戶是否存在,如果不存在,則提示用戶注冊(cè);如果存在,則登錄成功;
3 .在Mysql存在并登錄成功的同時(shí),將改條數(shù)據(jù)用Redis Hash類型進(jìn)行緩存,并設(shè)置過期時(shí)間為20分鐘;

import redis

pool = redis.ConnectionPool(host='127.0.0.1',port=6379)
r = redis.Redis(connection_pool=pool)
class Redis_login():
    def __init__(self,user,pwd):
        # user = input('請(qǐng)輸入用戶名\n')
        # pwd = input('請(qǐng)輸入密碼\n')
        r.mset(user1='123',user2='1234',user3='12345')
    def login(self):
        ls = []
        for key in r.keys():
            ls.append(key.decode('utf-8'))
        if user not in ls:
            print('用戶名錯(cuò)誤請(qǐng)重新輸入')
        elif r.get(user).decode('utf-8') == pwd:
            print('登錄成功!?。?)
        else:
            red.not_login()
    def not_login(self):
        print('輸入錯(cuò)誤請(qǐng)重新輸入')

if __name__ == '__main__':
    while True:
        user = input('請(qǐng)輸入用戶名\n')
        pwd = input('請(qǐng)輸入密碼\n')
        red = Redis_login(user,pwd)
        red.login()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 連接數(shù)據(jù)庫 StrictRedis ConnectionPool 構(gòu)造url方式連接到數(shù)據(jù)庫,有以下三種模式: S...
    cnkai閱讀 3,207評(píng)論 0 2
  • 昨天,我們討論了python如何連接redis。今天我們要學(xué)習(xí)如何用python操作redis的數(shù)據(jù)。 這里,再補(bǔ)...
    阿爾卑斯山上的小灰兔閱讀 1,388評(píng)論 0 0
  • 先了解清楚sentinel和cluster的差別,再學(xué)習(xí)使用python操作redis的API,感覺會(huì)更加清晰明白...
    LeeYunFeng閱讀 4,342評(píng)論 0 49
  • 1.概述 Python 默認(rèn)沒有集成 Redis 插件庫,需要安裝 Redis 的插件庫。因而,我們需要先去集成插...
    dengjie閱讀 501評(píng)論 2 1
  • 今年是長征勝利80周年,對(duì)我來說并沒什么意義,那樣的時(shí)代距離我們太過遙遠(yuǎn),只是存在于教科書中的一個(gè)故事。然而今...
    淺淺的暖閱讀 250評(píng)論 0 0

友情鏈接更多精彩內(nèi)容