本文說明瞭redis的基本用法,python與redis交互以及與mysql交互使用 ...
啟動redis伺服器:sudo redis-server /etc/redis/redis.conf
通過客戶端進入,執行命令:redis-cli
測試服務是否可用:ping
查看redis當前狀態:ps -ajx|grep redis
停止redis服務:sudo service redis stop或者:redis-cli shutdown
啟動redis服務:sudo service redis start
如果修改配置文件後啟動伺服器:sudo redis-server /etc/redis/redis.conf
重啟redis服務:sudo service redis restart
設置鍵值name,內容是hello world:
set name "hello world"
設置鍵值及過期時間,以秒為單位:
setex name 5 "hello world"
設置多個鍵值-mset:
mset key1 "abc" key2 "edf"
根據多個鍵獲取多個值
mget key1 key2
設置數字類型的key: set "num" 10
將key對應的value加1:incr num
將key對應的value加整數:incrby num 10
將key對應的value減1:decr num
將key對應的value減整數:decrby num 10
追加值(append):append num 00,在後面拼接字元串
得到string類型的長度:strlen num
查看所有的鍵:keys *
判斷鍵是否存在,如果存在返回1,不存在返回0:EXISTS num
查看鍵對應的value的類型:type num
刪除鍵及對應的值,刪除成功返回1,失敗返回0: del num
設置和查看過期時間,以秒為單位: EXPIRE num 5 #修改為5秒過期
查看有效時間,以秒為單位:ttl num
hash
設置單個屬性HSET:hset py3 "name" "gj"
設置多個屬性HMSET: hmset py3 "name" "hr" "gender" 0
獲取一個屬性的值 HGET: hget py3 name
獲取多個屬性的值HMGET: hmget py3 "name" "gender"
獲取所有屬性和值HGETALL:hgetall py3
獲取所有的屬性HKEYS:hkeys py3
獲取所有值HVALS: hvals py3
返回包含屬性的個數HLEN: hlen py3
判斷屬性是否存在HEXISTS,存在返回1,不存在返回0: HEXISTS py3 name
刪除屬性及值,不會刪除py3下的其他屬性: hdel py3 name
del py3 所有的都刪除
list
在頭部插入數據LPUSH(爬蟲用到這個語句)lpush py5 "abc" "efg"
查看數據 lrange py5 0 -1 ps:py5表示集合,0表示集合開始,-1表示集合結尾
查看類型 type py5
在尾部插入數據RPUSH :rpush py5 "haha" "xixi"
在一個元素的前|後插入新元素linsert :
元素的前插入新元素 linsert py5 after "haha" "hehe"
元素的後插入新元素 linsert py5 before "haha" "123"
根據下標設置值LSET :lset py5 0 "hello"
lset py5 -1 "xixihaha"
返回存儲在 key 的列表裡指定範圍內的元素: lrange py5 0 -1
lrange py5 2 -1
移除並且返回 key 對應的 list 的第一個元素: lpop py5
移除並返回存於 key 的 list 的最後一個元素: rpop py5
裁剪列表,改為原集合的一個子集 :ltrim py5 2 3
返回存儲在 key 里的list的長度: llen py5
返回列表裡索引對應的元素:lindex py5 0
lindex py5 3
set
添加元素--SADD: SADD key member [member ...]
ps:sadd py6 "abc" "def" "123"
返回key集合所有的元素--SMEMBERS:smembers py6
準備數據:
sadd py6 defg 123 abc 456
sadd py7 abc 123 world 456
求多個集合的交集:sinter py6 py7
求某集合與其它集合的差集:sdiff py6 py7
zset
添加--ZADD:ZADD key score member [score member ...]
ps: zadd py8 3 "you!" 1 "I" 2 "love"
返回指定範圍內的元素--ZRANGE : zrange py8 0 -1
返回元素個數--ZCARD:zcard py8
返回有序集key中,score(權重)值在min和max之間的成員--ZCOUNT :ZCOUNT key min max
ps:zcount py8 0 1
返回有序集key中,成員member的score值--ZSCORE :ZSCORE key member
ps:zscore py8 "I"
Redis與Python交互
綜合案例:用戶登錄:
需求說明
業務過程如下:
輸入用戶名、密碼
密碼加密
判斷redis中是否記錄了用戶名,如果有則成功
如果redis中沒有用戶名,則到mysql中查詢
從mysql中查詢成功後,將用戶名記錄到redis中
1、先完成python與redis的交互並且封裝在模塊myredis.py中:
import redis class RedisHelper(): def __init__(self,host='192.168.31.21',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) if __name__ == "__main__": red = RedisHelper() #name是key,hello world是值 red.set("name","hello world") #根據key得到值 print(red.get("name"))#b'hello world'
2、再完成python與mysql交互並且封裝成模塊mysql.py:
import pymysql class MysqlHelper(object): def __init__(self,host): self.host = host self.port = 3306 self.db = "mysql" self.user = "xxx" #mysql用戶名 self.password = "123456" #mysql密碼 self.charset = "utf8" #打開鏈接,返回的對象用conn屬性接收 def open(self): self.conn = pymysql.connect( host=self.host, port=self.port, db=self.db, user=self.user, password=self.password, charset=self.charset ) #得到cursor self.cursor = self.conn.cursor() #關閉鏈接 def close(self): self.cursor.close() self.conn.close() #曾刪改 def cur(self,sql,parms=[]): try: self.open() self.cursor.execute(sql,parms) #提交事務 self.conn.commit() self.close() print("執行完畢!") except Exception as result: print(result) #得到所以數據 def get_all(self,sql,parms=[]): try: self.open() self.cursor.execute(sql,parms) #返回所以的結果集 result = self.cursor.fetchall() self.close() return result except Exception as result: print(result) # 得到一條數據 def get_one(self, sql, parms=[]): try: self.open() self.cursor.execute(sql, parms) result = self.cursor.fetchone() self.close() return result except Exception as result: print(result) #插入數據 def insert(self,sql,parms=[]): self.__edit(sql,parms) #刪除數據 def delete(self,sql,parms=[]): self.__edit(sql,parms) #修改數據 def update(self,sql,parms=[]): self.__edit(sql, parms) #修改數據 def __edit(self,sql,parms=[]): try: self.open() count = self.cursor.execute(sql,parms) #提交事務 self.conn.commit() self.close() print("執行完畢!") return count except Exception as result: print(result)
3、最後實現用戶登錄:
from myredis import RedisHelper from mysql import MysqlHelper import hashlib name = input("請輸入用戶名:") pwd = input("請輸入密碼:") sha1=hashlib.sha1() sha1.update(pwd.encode("utf-8")) pwd1=sha1.hexdigest() try: redis=RedisHelper() if redis.get('uname')==name: print('ok') else: mysql = MysqlHelper('localhost') upwd = mysql.get_one('select upwd from userinfos where uname=%s',[name]) if upwd==None: print('用戶名錯誤') elif upwd[0]==pwd1: redis.set('uname', name) print('登錄成功') else: print("密碼錯誤") except Exception as e: print(e.message)