什么是redis?
redis是一個key-value存儲系統。它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
redis實際上是在內存中建立一塊緩存區,可以進行不同數據之間的數據傳遞。【不同進程之間的內存是不能共享的】QQ與微信要想進行數據的傳輸,需要在內存中構建一個中間商,用於二者之間的連接。相當於在中間商在二者之間建立了socket。
redis的安裝
https://github.com/MicrosoftArchive/redis/releases

安裝后,在安裝路徑下使用redis-cli.exe可以進行命令行式的操作。【命令行的操作指令與在python中使用的格式略有不同】

在使用命令行式的操作時,當對於一個指令的編寫格式不熟悉時,可以使用help指令進行查詢:

String類型操作

該類型的操作只是針對字符串,數字類型的存儲,即只是鍵值對形式的單值存儲。從返回的結果中可以看出,這樣直接set再get的結果返回的是byte類型。對於整型可以直接使用int將其強轉。
其中,第三行是連接池操作,使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然后作為參數Redis,這樣就可以實現多個Redis實例共享一個連接池。
redis中提供了Redis和StrictRedis兩個類,推薦使用StrictRedis類(第5行)。生成的實例可以添加到連接池當中。
然后,通過set指令,將數據傳輸到內存的緩存中。
可以在使用get指令,獲取數據。
1 # r.set() 目前只能設置數字和字符串類型 2 import redis 3 pool_redis = redis.ConnectionPool(host="localhost", port=6379) 4 r = redis.Redis(connection_pool=pool_redis) # 將當前的redis實例與連接池pool_redis鏈接 5 # r = redis.StrictRedis(host='localhost', port=6379, password=123456) 6 r.set('data', 10) # 這里面不能傳列表、字典 等等只能傳入數字和字符串 7 print(r.get('data')) 8 a = r.get('data') 9 print(int(a))
輸出:
1 b'10' 2 10
包含的方法:
set系列
1 set(name, value, ex=None, px=None, nx=False, xx=False)
在Redis中設置值,默認:不存在則創建,存在則修改
參數:
#ex,過期時間(秒) #px,過期時間(毫秒) #nx,如果設置為True,則只有name不存在時,當前set操作才執行 #xx,如果設置為True,則只有name存在時,當前set操作才執行
還有一些對set中包含的ex/px/nx/xx進行展開的方法
1 setnx(name, value) # set中nx字段的展開方法
設置值,只有name不存在時,執行設置操作(添加)
1 setex(name, value, time) # set中ex字段的展開方法
# 設置值 # 參數: # time,過期時間(數字秒 或 timedelta對象)
1 psetex(name, time_ms, value) # set中px字段的展開方法
# 設置值 # 參數: # time_ms,過期時間(數字毫秒 或 timedelta對象)
1 mset(*args, **kwargs) # 批量設置值
批量設置值
#如: mset(k1='v1', k2='v2') #或 mset({'k1': 'v1', 'k2': 'v2'})
1 setrange(name, offset, value) # 從某個位置開始替換
修改字符串內容,從指定字符串索引開始向后替換(新值太長時,則向后添加)
# 參數: # offset,字符串的索引,字節(一個漢字三個字節) # value,要設置的值
get系列
1 get(name)
獲取值
1 mget(keys, *args)
批量獲取
#如: mget('data', 'data_info') #或 r.mget(['data', 'data_info'])
1 getset(name, value) # ***
在設置新值時獲取原來的值
1 getrange(key, start, end) # 獲取時進行切片的操作
獲取子序列(根據字節獲取,非字符)
# 參數: # name,Redis 的 name # start,起始位置(字節) # end,結束位置(字節)
