【03】Redis使用教程 (全)


一、NoSQL簡介

1.NoSQL

    全名為Not Only SQL,指的是非關系型的數據庫。
    隨着訪問量的上升,網站的數據庫性能出現了問題,於是nosql被設計出來。

2.優點與缺點分析 

    1) 優點

        ①高可擴展性 
        ②分布式計算 
        ③低成本 
        ④架構的靈活性,半結構化數據 
        ⑤沒有復雜的關系 

    2) 缺點

        ①沒有標准化 
        ②有限的查詢功能(到目前為止) 
        ③最終一致是不直觀的程序

二、Redis安裝和運行

1.redis官方網站

    https://redis.io/,推薦下載穩定版本(stable)。

2.下載

tar zxvf redis-3.2.5.tar.gz

    ①復制,推薦放到usr/local目錄下

sudo mv -r redis-3.2.3/* /usr/local/redis/

    ②進入redis目錄

cd /usr/local/redis/

    ③生成

sudo make

    ④測試

sudo make test

    ⑤安裝,將redis的命令安裝到/usr/bin/目錄,這段運行時間會較長

sudo make install

    ⑥運行,啟動服務器

redis-server

    ⑦按ctrl+c停止,啟動客戶端:在新終端中運行如下代碼

redis-cli

    ⑧運行命令

pingset 'a' '123'

    ⑨當添加鍵值后,發現在當前運行的目錄下,創建了一個文件:dump.rdb,這個文件用於將數據持久化存儲

三、基本配置

1.redis.conf為配置文件

    在源文件/usr/local/redis目錄下。

2.綁定地址

    如果需要遠程訪問,可將此行注釋。

bind 127.0.0.1端口,默認為6379

3.守護進程

    ①如果以守護進程運行,則不會在命令行阻塞,類似於服務。
    ②如果以非守護進程運行,則當前終端被阻塞,無法使用。
    ③推薦改為yes,以守護進程運行。

daemonize no|yes

4.數據文件

dbfilename dump.rdb

5.數據文件存儲路徑

    ①dir的默認值為./,表示當前目錄。
    ②推薦改為:dir /var/lib/redis。

6.使用配置文件方式啟動

    ①直接運行redis-server會直接運行,阻塞當前終端。
    ②一般配置文件都放在/etc/目錄下。

sudo cp /usr/local/redis/redis.conf /etc/redis/

    ③推薦指定配置文件啟動。

sudo redis-server /etc/redis/redis.conf

7.停止redis服務

ps ajx|grep redissudo kill -9 redis的進程id

四、數據操作

1.鍵的類型

    redis是key-value的數據,所以每個數據都是一個鍵值對,鍵的類型是字符串。

2.值的類型分為五種

    ①字符串string
    ②哈希hash
    ③列表list
    ④集合set
    ⑤有序集合zset

3.數據操作的全部命令

    可以查看中文網站,http://redis.cn/commands.html

4.String

    1) 設置鍵值

set key value

    2) 設置鍵值及過期時間,以秒為單位

SETEX key seconds value

    3) 設置多個鍵值

MSET key value [key value ...]

    4) 根據鍵獲取值,如果不存在此鍵則返回nil

GET key

    5) 根據多個鍵獲取多個值

MGET key [key ...]

    6) 運算

INCR key

    7) 將key對應的value加整數

INCRBY key increment

    8) 將key對應的value減1

DECR key

    9) 將key對應的value減整數

DECRBY key decrement

    10) 追加值

APPEND key value

    11) 獲取值長度

STRLEN key

5.鍵的命令

    1) 查找鍵,參數支持正則

KEYS pattern

    2) 判斷鍵是否存在,如果存在返回1,不存在返回0

EXISTS key [key ...]

    3) 查看鍵對應的value的類型

TYPE key

    4) 刪除鍵及對應的值

DEL key [key ...]

    5) 設置過期時間,以秒為單位

EXPIRE key seconds

    6) 查看有效時間,以秒為單位

TTL key

6.hash

    1) 設置單個屬性

HSET key field value

    2) 設置多個屬性

HMSET key field value [field value ...]

    3) 獲取一個屬性的值

HGET key field

    4) 獲取多個屬性的值

HMGET key field [field ...]

    5) 獲取所有屬性和值

HGETALL key

    6) 獲取所有的屬性

HKEYS key

    7) 返回包含屬性的個數

HLEN key

    8) 獲取所有值

HVALS key

    9) 判斷屬性是否存在

HEXISTS key field

    10) 刪除屬性及值

HDEL key field [field ...]

    11) 返回值的字符串長度

HSTRLEN key field

7.List

    1) 在頭部插入數據

LPUSH key value [value ...]

    2) 在尾部插入數據

RPUSH key value [value ...]

    3) 在一個元素的前|后插入新元素

LINSERT key BEFORE|AFTER pivot value

    4) 設置指定索引的元素值

LSET key index value

    5) 移除並且返回 key 對應的 list 的第一個元素

LPOP key

    6) 移除並返回存於 key 的 list 的最后一個元素

RPOP key

    7) 返回存儲在 key 的列表里指定范圍內的元素

LRANGE key start stop

    8) 裁剪列表,改為原集合的一個子集

LTRIM key start stop

    9) 返回存儲在 key 里的list的長度

LLEN key

    10) 返回列表里索引對應的元素

LINDEX key index

8.Set

    1) 添加元素

SADD key member [member ...]

    2) 返回key集合所有的元素

SMEMBERS key

    3) 返回集合元素個數

SCARD key

    4) 求多個集合的交集

SINTER key [key ...]

    5) 求某集合與其它集合的差集

SDIFF key [key ...]

    6) 求多個集合的合集

SUNION key [key ...]

    7) 判斷元素是否在集合中

SISMEMBER key membe

9.Zset

    1) 添加

ZADD key score member [score member ...]

    2) 返回指定范圍內的元素

ZRANGE key start stop

    3) 返回元素個數

ZCARD key

    4) 返回有序集key中,score值在min和max之間的成員

ZCOUNT key min max

    5) 返回有序集key中,成員member的score值

ZSCORE key member

五、發布訂閱

1.發布訂閱   

    ①發布者不是計划發送消息給特定的接收者(訂閱者),而是發布的消息分到不同的頻道,不需要知道什么樣的訂閱者訂閱。
    ②訂閱者對一個或多個頻道感興趣,只需接收感興趣的消息,不需要知道什么樣的發布者發布的。
    ③發布者和訂閱者的解耦合可以帶來更大的擴展性和更加動態的網絡拓撲。
    ④客戶端發到頻道的消息,將會被推送到所有訂閱此頻道的客戶端。
    ⑤客戶端不需要主動去獲取消息,只需要訂閱頻道,這個頻道的內容就會被推送過來。

2.消息的格式

    1) 消息類型,包含三種類型

        ①subscribe:表示訂閱成功。如果第一部分的值為subscribe,則第二部分是頻道,第三部分是現在訂閱的頻道的數量。          
        ②unsubscribe:表示取消訂閱成功。如果第一部分的值為unsubscribe,則第二部分是頻道,第三部分是現在訂閱的頻道的數量,如果為0則表示當前沒有訂閱任何頻道,當在Pub/Sub以外狀態,客戶端可以發出任何redis命令。
        ③message:表示其它終端發布消息。如果第一部分的值為message,則第二部分是來源頻道的名稱,第三部分是消息的內容。    

    2) 訂閱

SUBSCRIBE 頻道名稱 [頻道名稱 ...]

    3) 取消訂閱,如果不寫參數,表示取消所有訂閱

UNSUBSCRIBE 頻道名稱 [頻道名稱 ...]

    4) 發布

PUBLISH 頻道 消息

六、主從配置

1.主從配置

    1) 設置主服務器的配置

bind 192.168.1.10

    2) 設置從服務器的配置

bind 192.168.1.11 slaveof 192.168.1.10 6379

    3) 在master和slave分別執行info命令,查看輸出信息

    4) 在master上寫數據

set hello world

    5) 在slave上讀數據

get hello

七、與python交互

1.客戶端代碼聯網安裝

    http://redis.cn/clients.html

sudo pip install redis

    使用源碼安裝

unzip redis-py-master.zipcd redis-py-mastersudo python setup.py install

2.交互代碼

    1) 引入模塊

import redis

    2) 連接

try:          
    r=redis.StrictRedis(host='localhost',port=6379)
except Exception,e:          
    print e.message

        ①根據數據類型的不同,調用相應的方法,完成讀寫。

r.set('name','hello')r.get('name')

        ②pipline:緩沖多條命令,然后一次性執行,減少服務器-客戶端之間TCP數據庫包,從而提高效率。

pipe = r.pipeline()pipe.set('name', 'world')pipe.get('name')pipe.execute()

    3) 封裝

        連接redis服務器部分是一致的,這里將string類型的讀寫進行封裝。

import redis

class RedisHelper():           
    def __init__(self,host='localhost',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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM