Redis 介紹
Redis是一種主要基於內存存儲和運行的,能快速響應的鍵值數據庫產品。
Redis數據庫產品用ANSI C語言編寫而成,是開源的,遵守BSD協議。
在讀寫響應性能上,傳統關係型數據庫<MongoDB等基於磁盤讀寫的NOSQL數據庫<Redis數據庫。
在應用業務範圍上,傳統的關係型數據庫應用業務範圍最廣,MongoDB主要應用於基於互聯網的Web業務應用。Redis只能解決Internet應用環境下的特定應用業務。
總之,Redis由於是基於內存讀寫,所以讀寫速度在上面三者中是最快的(單服務器每秒插入處理速度可以超過八萬條,這在高併發處理方面很有利),另外,Redis的應用範圍相對較窄,但是互聯網業務環境下很多大型網站需要它。
一、Redis的安裝(Windows)
Redis可以在Windows,Linux,Ubuntu等系統下安裝,在這裏我是在Windows(64)位系統下安裝的Redis-x64-3.0.504版本。 安裝包在如下鏈接裏:Redis提取碼i0x1
下載後把安裝包複製到自定義盤符的新建redis文件夾中,如,D:\redis。並將壓縮包解壓到當前文件夾。
首先,打開cmd命令行,用cd命令進入到D:\redis,輸入 redis-server.exe redis.windows.conf啓動服務器,會看到如下結果:
此時不要關閉這個cmd窗口,否則將無法訪問服務器端,再另外打開一個cmd窗口
進入到D:/redis,運行redis-cli.exe -h 127.0.0.1 -p 6379表示連接此服務,端口 6379
下面是進行一些基本操作進行測試
設置鍵值對:set a A
取出鍵值對:get a
結果顯示如下圖:
能夠成功運行,表示安裝成功。
二、Redis的數據類型
redis支持五種數據類型,截至2017年六月,Redis官網提供的數據結構類型已經達到八種。
1.字符串(String)
字符串是redis 最簡單的數據結構。
字符串內容是二進制安全的(二進制安全是指,在傳輸數據時,保證二進制數據的信息安全,也就是不被篡改、破譯等,如果被攻擊,能夠及時檢測出來。)也就是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。
2.列表(List)
列表是由若干插入順序排序的字符串元素組成的集合。
按照鏈表的插入順序排序,讀寫操作時只能從其兩頭開始。(由於採用鏈表技術實現,所以在鏈表頭插入新字符串速度非常快)。
3.集合(set)
由不重複且無序的字符串元素構成的一個整體。(和列表加以區分)
4.散列表(Hash)
散列表可以存儲多個鍵值對的映射,是無序的一種數據集合。
鍵中間可以採用類似:的隔離符號。鍵必須爲字符串型內容,值可以是字符串型也可以是數字型。
Hash特別適用於存儲一個對象。
5.有序集合(Sorted Set)
有序集合和散列一樣都是由鍵值對構成的數據集合。
但是有序集合根據值進行自動排序,而散列值表不排序。有序集合可以對值進行直接操作,而散列通過鍵查找來獲取值。
有序集合的鍵字符串必須唯一,值可以重複,值必須可以解析爲浮點數。
6.位圖(Bitmap)
7.HyperL ogLog
三、Redis 命令
上面介紹了redis數據庫基於鍵值基本存儲原理的基礎上,一些經過細化分類的數據類型,下面關於是redis命令的一些比較基本的操作。
以字符串命令爲例
1)基本字符串操作命令包括設置,獲取,刪除,取長度等。
Set
set key value #設置指定key的值
127.0.0.1:6379> set name "yinyuke" #設置鍵名爲name,值爲yinyuke的字符串
OK
127.0.0.1:6379>
127.0.0.1:6379> set book "NOSQL" EX 1 #設置一秒後book過期
OK
127.0.0.1:6379> set Cname "ᅭ�ᅮ↑₩" #中文出現字符編碼不匹配問題
OK
127.0.0.1:6379> get Cname
"\xd2\xf3\xd3\xea\xe7\xe6"
MSet命令
127.0.0.1:6379> MSet book1 "math" book2 "English" #對多個鍵設置對應的值
OK
MSetNX
127.0.0.1:6379> MSetNX book1ID 1 book2ID 2
(integer) 1
127.0.0.1:6379> MSetNX book3ID 3 book1ID 1
(integer) 0 #出現重複設值,返回0 ,整條命令不操作
Get
get key #返回鍵對應的值,若值不存在,則返回nil
127.0.0.1:6379> get book1
"math"
127.0.0.1:6379> get book3
(nil)
MGet
127.0.0.1:6379> MGet book1 book2
1) "math"
2) "English"
127.0.0.1:6379> MGet book1 book2 book3
1) "math"
2) "English"
3) (nil)
Del
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> del book1 book2 #可以同時刪除多個
(integer) 2
127.0.0.1:6379> Mget book1 book2
1) (nil)
2) (nil)
2)修改字符串操作命令包括Append,GetRange,GetSet,SetRange等
StrLen
StrLen key
127.0.0.1:6379> set name "Siri"
OK
127.0.0.1:6379> StrLen name
(integer) 4 #返回字節數,一個字母一個字節如果爲漢字,則一個漢字兩個字節
Append
Append key value
127.0.0.1:6379> append student "a"
(integer) 1
127.0.0.1:6379> append student "b"
(integer) 2
127.0.0.1:6379> get student
"ab"
GetRange
127.0.0.1:6379> getrange sentence 1 6 #正向從0 開始數
"hat is"
127.0.0.1:6379> get range -4 -1 #從後往前進行字符串截取
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379>
GetSet
127.0.0.1:6379> getset student1 "c"
(nil) #指定的鍵不存在,返回nil
127.0.0.1:6379> getset student a
"ab" #指定的鍵存在,設置新值後返回舊值
其他的命令操作因爲過於繁雜,就先不在這裏演示,詳細可以去看參考書籍。
四、python連接Redis
首先在連接之前,需要先在Python中安裝redis模塊
在命令行中輸入 pip3 install redis 即可
但是在執行中我的cmd卻出現了以下錯誤,導致python代碼無法運行
WARNING: You are using pip version 19.3.1; however, version 20.0.2 is available.
在網上搜索以後,發現應該是pip版本的問題,我找到了如下解決方法:
在cmd命令行中輸入如下命令:
再進行上述操作即可。
另外,代碼在運行時,還會出現以下錯誤:
ERR Client sent AUTH, but no password is set
是因爲
Redis服務器沒有設置密碼,但客戶端向其發送了AUTH(authentication,身份驗證)請求。
這時,需要進行密碼設置,具體操作如下:
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass "123456"
OK
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> set name yin
OK
此時,再去運行代碼,就能正確運行了
python連接redis並進行一些基本操作的代碼如下:
import redis
HOST = 'localhost'PORT = '6379'PASSWORD = '123456'
r_db = redis.Redis(host=HOST, port=PORT, password=PASSWORD, decode_responses=True, # decode_responses=True,寫入value中爲str類型,否則爲字節型 db='2') # 默認不寫是db0
r_db.set('name','yuke')
# set的幾個參數:'''前面兩個,一個key,一個valueex,過期時間(秒)px,過期時間(毫秒)nx,如果設置爲True,則只有name不存在時,當前set操作才執行xx,如果設置爲True,則只有name存在時,當前set操作才執行'''
print(r_db['name'])print(r_db.get('name'))print(type(r_db.get('name')))
輸出結果爲:
yuke
yuke
<class 'str'>
參考書籍《NOSQL數據庫入門與實踐(基於MongoDB、Redis)》(劉瑜 王勝鬆著)