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