Redis 的安裝和基本操作

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)》(劉瑜 王勝鬆著)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章