真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Redis原理及基本應(yīng)用

CAP定理:

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供東安企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為東安眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

    C:Consistency 一致性,分布式系統(tǒng)中數(shù)據(jù)備份節(jié)點都需要實時保持?jǐn)?shù)據(jù)一致性;

    A:Availability 可用性,集群中有節(jié)點發(fā)生故障,并不影響整個集群對外提供服務(wù);

    P:Partition tolerance 分區(qū)容錯性,系統(tǒng)數(shù)據(jù)部分丟失后,仍能提供服務(wù)。

    

在一個分布式系統(tǒng)中,CAP三者不能兼得;高可用、數(shù)據(jù)一致是很多系統(tǒng)設(shè)計的目標(biāo),但是分區(qū)的現(xiàn)象是不可避免的事情:

    CA:分區(qū)的現(xiàn)象是始終存在的,一般得CA系統(tǒng)指的是在各分區(qū)后的子分區(qū)內(nèi)保持CA;

    CP:系統(tǒng)保持強一致性,在同步各節(jié)點之間數(shù)據(jù)中,無法做到多外提供服務(wù),在關(guān)系型數(shù)據(jù)庫事務(wù)中,就能體現(xiàn)CP的特性;

    AP:保證高可用,就必須放棄強一致性。一旦集群中發(fā)生分區(qū)現(xiàn)象,每個節(jié)點都能使用自己的本地數(shù)據(jù)對外提供服務(wù),但是這樣會導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性,NOSQL都基本數(shù)據(jù)此特性。

Redis原理及基本應(yīng)用

    由于網(wǎng)絡(luò)硬件等問題,造成延遲丟包的現(xiàn)象肯定會發(fā)生,所以分區(qū)容忍性是我們必須要實現(xiàn)的。在設(shè)計分布式系統(tǒng)中,只能在一致性和可用性之間做權(quán)衡。

BASE方案:

    BA(Basically Available) 基本可用,分布式系統(tǒng)出現(xiàn)故障時,允許損失部分可用性,保證核心可用;

    S(Soft state) 軟狀態(tài),指允許系統(tǒng)出現(xiàn)中間狀態(tài),不會影響系統(tǒng)整體可用性;

    E(Eventually consistent) 最終一致,系統(tǒng)中所有數(shù)據(jù)副本經(jīng)過一段時間后,最終能夠達到一致的狀態(tài)。

 

NoSQL主要的四種技術(shù)流派:

    K/V存儲:key-value,如Dynamo、redis;

    Column Family:列式數(shù)據(jù)庫,如HBase;

    Document:文檔數(shù)據(jù)庫,如MongoDB;

    GraphDB:圖式數(shù)據(jù)庫。

Redis:Remote DICtionary Server:數(shù)據(jù)結(jié)構(gòu)服務(wù)器。

Redis的特點:

    (1) 完全開源免費,遵守BSD協(xié)議;

    (2) 支持?jǐn)?shù)據(jù)持久化存儲;

    (3) 支持?jǐn)?shù)據(jù)備份。

    

Redis的優(yōu)勢:

    (1) 性能高— 110000次/s的讀速度,81000次/s的寫速度;

    (2) 支持的數(shù)據(jù)類型多— 有字符串(String),哈希(Hash),列表(List),集合(Sets),有序集合(Sorted sets)等類型的值。

    (3) 原子性— 所有的操作都是原子性的;

    (4) 特性豐富— 支持publish/subscribe、通知、key過期等特性。

Redis安裝:3.0以上版本,需要到官網(wǎng)下載rpm包。

    安裝Redis的rpm包需要依賴到j(luò)emalloc安裝包,所以需要配置好epel的yum源:

    yum install ./redis-3.2.3-1.el7.x86_64.rpm

Redis配置:

    Redis的配置文件為/etc/redis.conf,默認(rèn)的監(jiān)聽端口為TCP的6379,通過rediscli可以登錄交互式命令行界面:

    [root@node7 ~]# systemctl start redis.service      

      [root@node7 ~]# redis-cli

      127.0.0.1:6379>

Redis數(shù)據(jù)類型:

Redis支持五中數(shù)據(jù)類型:字符串(String),哈希(Hash),列表(List),集合(Sets),有序集合 (Sorted sets)。

 

(1) 字符串(String)  

    127.0.0.1:6379> SET name 'hisen'     #設(shè)置一個字符串的key為name,value為hisen

    OK                                   #設(shè)置結(jié)果狀態(tài)為OK

    127.0.0.1:6379> GET name             #獲取key為name的值

    "hisen"                              #獲取的結(jié)果

    注意:一個鍵最大能存儲512MB。

 

(2) 哈希(Hash)

Hash類型為一鍵多值型,一個鍵對應(yīng)一個集合的值,命令HMSET、HGETALL。

    127.0.0.1:6379> HMSET hisen id name age gender

    OK

    127.0.0.1:6379> HGETALL hisen

    1) "id"

    2) "name"

    3) "age"

    4) "gender"

    每個hash可以存儲2^32-1個鍵值對。

 

(3) 列表(List)   

列表類型值,可以從左邊或者右邊加入字符串列表中,命令LPUSH、RPUSH、LRANGE:               

    127.0.0.1:6379> LPUSH friends he

    (integer) 1

    127.0.0.1:6379> LPUSH friends tao

    (integer) 2

    127.0.0.1:6379> LPUSH friends ying

    (integer) 3

    127.0.0.1:6379> RPUSH friends yu

    (integer) 4

    127.0.0.1:6379> RPUSH friends zhen

    (integer) 5

    127.0.0.1:6379> LRANGE friends 0 4

    1) "ying"

    2) "tao"

    3) "he"

    4) "yu"

    5) "zhen"

Redis原理及基本應(yīng)用

    每個列表最多可存儲2^32-1個元素。

(4) 集合(Sets)

 Set是string類型的無序集合,命令SADD 、SMEMBERS。

 添加一個String元素,成功返回1,如果插入的元素與集合中某元素相同,則返回0。

    127.0.0.1:6379> SADD animals cat

    (integer) 1

    127.0.0.1:6379> SADD animals pig

    (integer) 1

    127.0.0.1:6379> SADD animals dog

    (integer) 1

    127.0.0.1:6379> SADD animals panda

    (integer) 1

    127.0.0.1:6379> SADD animals dog

    (integer) 0

    127.0.0.1:6379> SMEMBERS animals

    1) "pig"

    2) "panda"

    3) "cat"

    4) "dog"

(5) ZSET 有序集合 (Sorted sets)

ZSET也是string類型元素集合,而且不重復(fù);

每個元素加入集合中時都會關(guān)聯(lián)一個double類型的分?jǐn)?shù),Redis就是通過分?jǐn)?shù)來對集合元素進行從大到小的排序,分?jǐn)?shù)可以相同。   

    127.0.0.1:6379> ZADD animals 0 pig

    (integer) 1

    127.0.0.1:6379> ZADD animals 2 cat

    (integer) 1

    127.0.0.1:6379> ZADD animals 4 dog

    (integer) 1

    127.0.0.1:6379> ZADD animals 6 panda

    (integer) 1

    127.0.0.1:6379> ZRANGEBYSCORE animals 0 10

    1) "pig"

    2) "cat"

    3) "dog"

    4) "panda"

Redis 配置:

    Redis的配置文件為安裝目錄下的redis.conf文件,也可以通過命令行來查看:        

    127.0.0.1:6379> CONFIG GET *

      1) "dbfilename"

      2) "dump.rdb"

      3) "requirepass"

      4) "hisen"

      5) "masterauth"

      6) ""

      7) "unixsocket"

      8) ""

      9) "logfile"

     10) "/var/log/redis/redis.log"

     11) "pidfile"

     12) "/var/run/redis/redis.pid"

     13) "slave-announce-ip"

     14) ""

     15) "maxmemory"

     16) "0"

     17) "maxmemory-samples"

     18) "5"

     19) "timeout"

     20) "0"

     21) "auto-aof-rewrite-percentage"

     22) "100"

     23) "auto-aof-rewrite-min-size"

     24) "67108864"

     25) "hash-max-ziplist-entries"

     26) "512"

     27) "hash-max-ziplist-value"

     28) "64"

     29) "list-max-ziplist-size"

     30) "-2"

     31) "list-compress-depth"

     32) "0"

       …

    

    redis.conf 配置文件項:      

    bind 0.0.0.0    #監(jiān)聽端口

    protected-mode yes 

    port 6379    #默認(rèn)監(jiān)聽端口

    tcp-backlog 511  

    timeout 0    #超時時間,0為不超時

    tcp-keepalive 300

    daemonize no    #是否以守護方式運行

    supervised no

    pidfile /var/run/redis/redis.pid  #存放pid的文件

    loglevel notice    #日志記錄級別:debug、verbose、notice、warning

    logfile /var/log/redis/redis.log  #日志存放的文件

    databases 16    #數(shù)據(jù)庫數(shù)量

    save 900 1    #指定900s內(nèi),有1次更新,就將數(shù)據(jù)同步到磁盤文件中

    save 300 10   #指定300s內(nèi),有10次更新,就將數(shù)據(jù)同步到磁盤文件中

    save 60 10000    #指定60s內(nèi),有10000次更新,就將數(shù)據(jù)同步到磁盤文件中

    stop-writes-on-bgsave-error yes

    rdbcompression yes     #本地數(shù)據(jù)是否壓縮

    rdbchecksum yes

    dbfilename dump.rdb    #本地數(shù)據(jù)庫名,默認(rèn)為dump.rdb

    dir /var/lib/redis       #本地數(shù)據(jù)庫存放路徑

    slaveof   #本機為slave時,指定的master地址及端口號

    masterauth   #slave連接master的密碼

    slave-serve-stale-data yes

    slave-read-only yes

    repl-diskless-sync no

    repl-diskless-sync-delay 5

    repl-disable-tcp-nodelay no

    slave-priority 100

    requirepass foobared    #設(shè)置redis連接密碼

    maxclients 10000   #同一時間最大客戶端連接數(shù)

    maxmemory    #指定redis最大可使用內(nèi)存空間

    appendonly no   #指定是否在每次更新操作后進行日志記錄

    appendfilename "appendonly.aof"   #更新日志文件名

    appendfsync everysec   #指定更新日志條件:no表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤;always每次更新操作后手動低啊用fsync()將數(shù)據(jù)寫進磁盤;everysec每秒同步一次

    no-appendfsync-on-rewrite no

    auto-aof-rewrite-percentage 100

    auto-aof-rewrite-min-size 64mb

    aof-load-truncated yes

    lua-time-limit 5000

    slowlog-log-slower-than 10000

    slowlog-max-len 128

    latency-monitor-threshold 0

    notify-keyspace-events ""

    hash-max-ziplist-entries 512  

    hash-max-ziplist-value 64

    list-max-ziplist-size -2

    list-compress-depth 0

    set-max-intset-entries 512

    zset-max-ziplist-entries 128

    zset-max-ziplist-value 64

    hll-sparse-max-bytes 3000

    activerehashing yes

    client-output-buffer-limit normal 0 0 0

    client-output-buffer-limit slave 256mb 64mb 60

    client-output-buffer-limit pubsub 32mb 8mb 60

    hz 10

    aof-rewrite-incremental-fsync yes

Redis 發(fā)布訂閱

    Redis 發(fā)布訂閱分為發(fā)送消息端(pub),接收信息端(sub)。

Redis原理及基本應(yīng)用

Redis原理及基本應(yīng)用

  

    示例:

    (1) 創(chuàng)建一個訂閱頻道WeChat:

    127.0.0.1:6379> SUBSCRIBE WeChat

    Reading messages... (press Ctrl-C to quit)

    1) "subscribe"

    2) "WeChat"

    3) (integer) 1

    (2) 另外開啟一個客戶端,并對WeChat頻道進行信息發(fā)布:

    127.0.0.1:6379> PUBLISH WeChat "Today is a funny day!"

    (integer) 1

    127.0.0.1:6379> PUBLISH WeChat "I Love Linux!"

    (integer) 1

    (3) 返回訂閱客戶端查看:             

    127.0.0.1:6379> SUBSCRIBE WeChat

    Reading messages... (press Ctrl-C to quit)

    1) "subscribe"

    2) "WeChat"

    3) (integer) 1

    1) "message"

    2) "WeChat"

    3) "Today is a funny day!"

    1) "message"

    2) "WeChat"

    3) "I Love Linux!"

命令

描述

PSUBSCRIBE pattern  [pattern ...]

訂閱一個或多個符合模式的頻道

PUBSUB subcommand  [argument [argument ...]]

查看訂閱與發(fā)布系統(tǒng)狀態(tài)

PUBLISH channel message

將信息發(fā)送給指定頻道

PUNSUBSCRIBE [pattern  [pattern ...]]

退訂所有給定模式的頻道

SUBSCRIBE channel  [channel ...]

訂閱給定的一個或多個頻道信息

UNSUBSCRIBE [channel  [channel ...]]

退訂給定的頻道

Redis 事務(wù):

    事務(wù)隔離性:一個事務(wù)中的所有命令都會按順序執(zhí)行,執(zhí)行事務(wù)時不會被其他客戶端發(fā)來的命令打斷;

    事務(wù)原子性:事務(wù)中的命令,要么全部執(zhí)行,要么全部不執(zhí)行。

         

    示例:     

    MULTI是開啟一個事務(wù)的標(biāo)識,之后多個命令會在事務(wù)中列隊,等執(zhí)行EXEC時,列隊中的所有命令再依次執(zhí)行。 

    127.0.0.1:6379> MULTI

    OK

    127.0.0.1:6379> SET name hisen

    QUEUED

    127.0.0.1:6379> GET name

    QUEUED

    127.0.0.1:6379> SADD xingshi zhao qiao sun li

    QUEUED

    127.0.0.1:6379> SMEMBERS xingshi

    QUEUED

    127.0.0.1:6379> EXEC

    1) OK

    2) "hisen"

    3) (integer) 4

    4) 1) "qiao"

       2) "li"

       3) "sun"

       4) "zhao"

命令

描述

DISCARD

取消事務(wù)

EXEC

執(zhí)行事務(wù)

MULTI

開始一個事務(wù)

UNWATCH

取消對所有key的監(jiān)控

WATCH key [key ...]

監(jiān)控key,如果在事務(wù)執(zhí)行前key被更改,事務(wù)將會被打斷

Redis 安全:     

    設(shè)置服務(wù)連接密碼,可以通過配置文件,也可以通過命令行設(shè)置:

    (1)查看Redis是否啟用密碼驗證:

    127.0.0.1:6379> CONFIG GET requirepass

    1) "requirepass"

    2) ""                    #空字符串代表沒設(shè)置驗證密碼

 

    (2)設(shè)置Redis密碼驗證:   

    127.0.0.1:6379> CONFIG SET requirepass "hisen"     #設(shè)置密碼為hisen

    OK

    127.0.0.1:6379> CONFIG GET requirepass             #查看密碼

    1) "requirepass"

    2) "hisen"                                         #密碼已設(shè)置,為hisen

 

    (3)驗證密碼有效性:     

    127.0.0.1:6379> GET name                     #沒輸密碼前,試圖獲取數(shù)據(jù)

    (error) NOAUTH Authentication required.      #顯示沒有認(rèn)證的錯誤

    127.0.0.1:6379> AUTH hisen                   #輸入認(rèn)證密碼           

    OK                                           #狀態(tài)為OK

    127.0.0.1:6379> GET name                     #再次獲取數(shù)據(jù)

    "hisen"                                      #正確返回數(shù)據(jù)

Redis 性能測試工具之redis-benchmark

    redis-benchmark [option] [option value]

    redis-benchmark選項:

選項

描述

默認(rèn)值

-h

指定主機名

127.0.0.1

-p

指定端口

6379

-s

服務(wù)器socket


-c

并發(fā)連接數(shù)

50

-n

請求數(shù)

10000

-d

以字節(jié)的形式指定SET/GET值的數(shù)據(jù)大小

2

-k

1=keep  alive    0=reconnect

1

-r

SET/GET/INCR使用隨機key,SADD使用隨機值


-P

通過管道傳輸請求

1

-q

強制退出redis。僅顯示query/sec值


--csv

以CSV格式輸出


-l

生成循環(huán),永久執(zhí)行測試


-t

僅運行以逗號分隔的測試命令列表


-l

ldle模式,僅打開N個idle連接并等待


-a

指定認(rèn)證密碼


-dbnum

選擇數(shù)據(jù)庫號

0

-e

標(biāo)準(zhǔn)輸出server回復(fù)的錯誤信息


    示例:                                                                                  

    [root@node7 ~]# redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -c 100 -n 10000

    ====== SET ======

      10000 requests completed in 0.07 seconds

      100 parallel clients

      3 bytes payload

      keep alive: 1

     

    98.23% <= 1 milliseconds

    100.00% <= 1 milliseconds

    147058.81 requests per second

     

    ====== LPUSH ======

      10000 requests completed in 0.07 seconds

      100 parallel clients

      3 bytes payload

      keep alive: 1

     

    99.51% <= 1 milliseconds

    100.00% <= 1 milliseconds

    147058.81 requests per second

      

    [root@node7 ~]# redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -c 100 -n 10000 -q

    SET: 144927.55 requests per second

    LPUSH: 151515.16 requests per second


新聞名稱:Redis原理及基本應(yīng)用
網(wǎng)站地址:http://weahome.cn/article/pcijsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部