1. 程式人生 > >redis非關係型資料庫的基本型別以及簡單操作

redis非關係型資料庫的基本型別以及簡單操作

2018.01.19**************************************************************
author: wills
redis有五大型別 sting hash list set zset
set p 1 設定p的值為1
get p 獲取p的值
incr p 整數p的值增加1
decr p 整數p的值減少1
redis相關 REmote Dictionary Server

1. set mykey “test” 為鍵mykey設定新值,並覆蓋原有值
2. getset mcounter 0 先取值mcounter的值,再給mcounter賦值,取得值是mcounter之前的值
3. setex mykey 10 “hello” 設定mykey的過期時間為10s,在存活時間內可以取mykey的值,過期後mykey不在存在
4. setnx mykey “hello” 若該鍵不存在,則為該鍵設定新值


1. del mykey 刪除已有鍵


1.append mykey “hello” 若該鍵不存在,返回當前value的長度,若存在則返回追加後的長度
2. incr mykey 如果mykey的值是整數則其值增加1,否則出錯
3. decr mykey 如果mykey的值是整數其值減一,否則報錯
4. decrby mykey 3 如果mykey的值為整數則其值 - 3
5. setrange mykey 20 dd 把mykey中第21和22


1. exists mykey 判斷mykey這個鍵是否存在,存在返回1,不存在返回0
2. get mykey 獲取mykey對應的值
3. strlen mykey 檢視mykey的長度
4. ttl mykey 檢視mykey的存活時間,一直存在則為-1,不存在-2 ,有存在時間則返回剩餘存在時間
5. mget key1 key2 key3 批量的獲取鍵
6. 檢視資料型別 type p

下面是一個我用python模擬賬號登入的操作,輸入的賬號和密碼先和非關係型資料庫redis裡面的資料進行,當比較結果匹配時直接顯示登入成功,如果不匹配,那麼再去關係型資料集mysql裡面login這個儲存使用者名稱和密碼的表裡查詢,看有沒有匹配,如果匹配成功則返回登入成功,並且修改redis對應的值,如果還是沒有匹配那麼返回錯誤,程式碼如下。

# 匯入sys模組,用於接收命令列傳入的引數,模擬使用者在網頁或者app上輸入的賬號密碼
import sys
# 匯入pymysql,redis模組用於連線相關資料庫
import pymysql
import redis

# 定義連線mysql的函式
def con_mysql(sql): # 連線的資料庫是我自己放在阿里雲伺服器上的,埠是預設的3306 # db表示我的資料放在test1資料庫裡面 db = pymysql.connect( host='120.79.131.105', user='root', passwd='13579', db='test1', port=3306, charset='utf8') # 建立一塊快取區,儲存sql語句執行後獲得的結果 cursor = db.cursor() # 執行sql語句,sql語句通過引數傳入 cursor.execute(sql) data = cursor.fetchall() db.close() # 返回值會執行sql語句返回的結果 return data # 定義連線redis函式 def con_redis(): return redis.Redis(host='120.79.131.105', password='123456', port=6379) def main(): # 首先獲取傳入的引數使用者名稱和密碼 username = sys.argv[1] passwd = sys.argv[2] # 連線redis,獲得一個物件r,用r對redis裡面的資料進行相應的操作 r = con_redis() # 查詢redis中名為user的雜湊表,裡面存放著所有的使用者名稱和密碼 r_names = r.hkeys('user') flag = False # user表的鍵表示使用者名稱,對其進行遍歷,看看有沒有和輸入使用者名稱相同的,如果有繼續比較相應的密碼,如果沒有則進入下一步,flag標籤在這裡用來進行特殊條件判斷 # flag初始值=2,一旦進入迴圈,其值變為false, for name in r_names: name = name.decode('utf8') # 如果使用者名稱存在,再查詢相應的密碼 if username == name: r_passwd = r.hget('user', username).decode('utf8') if r_passwd == passwd: flag = True print('登入成功') # 如果找到對應的賬號密碼輸出登入成功,並且跳出迴圈,並且將flag的值置為True break # 如果在redis沒有找到對應賬號密碼,再去mysql裡面尋找 if not flag: # sql表示資料庫查詢語句 sql = 'select * from login;' mysql = con_mysql(sql) f = True for user in mysql: if user[0] == username and user[1] == int(passwd): r.hset('user', username, passwd) print('登入成功,重新整理redis') f = False break if f: print('使用者名稱或密碼錯誤') # 這裡表示在資料庫也沒有找到對應的賬號與密碼 else: print('使用者名稱或密碼錯誤') if __name__ == '__main__': main()