個人大數據總結之redis

總結了好久,終於到了我最喜歡的redis部分,在這個階段就讓我們好好的瞭解一下這個強大的工具~

一、redis介紹

redis是一個開源的,基於內存存儲的數據結構服務器,可以被用作數據庫,高速緩存和消息隊列。它可以支持衆多的數據類型,如字符串、哈希、列表、集合、有序集合等數據類型。它內置了複製、Lua腳本、LRU收回、事務以及不同級別磁盤持久化功能,高可用也可以進行自動分區等。簡而言之,redis是一種面向“鍵/值”對數據類型的內存數據庫,它可以滿足我們對海量數據快速讀寫的需求。

(1)redis的特點

①redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啓的時候可以再次加載進行使用。

②redis不僅僅支持簡單的k-v類型的數據,同時還提供list、set、zset、hash等數據結構的存儲。

③redis支持數據的備份,及master-slave主從模式的數據備份。

(2)redis的優勢

①性能極高---redis讀的速度可達11w/s,寫的速度可達8.1w/s。

②豐富的數據類型---redis支持二進制的string、list、hash、set及order set數據類型操作。

③原子性---redis所有的操作都是原子性的,同時redis還支持對幾個集合合併後的原子性執行。

④豐富的特性---redis還支持發佈/訂閱,通知,key過期等特性。

二、redis的單機安裝

1.下載解壓

下載地址:http://download.redis.io/releases/,我使用的版本是redis-3.2.0

也可以直接在服務器上使用wget進行下載:wget http://download.redis.io/releases/redis-3.2.0.tar.gz

下載完成後解壓:tar -zxvf redis-3.2.0.tar.gz -C /opt/

2.編譯

首先進入到redis的安裝目錄:cd /opt/redis-3.2.0

然後使用make命令進行編譯,在編譯完成後,就會在src目錄下產生redis的相關命令。(如果是在windows下,解壓完成後即可使用)。

3.初始配置

①修改redis.conf中的配置項

       添加:daemonize yes(後臺運行)

             logfile /opt/redis-3.2.0/logs/redis.log(日誌文件,目錄必須存在)

②啓動redis

服務端:src/redis-server redis.conf

查看服務端是否啓動成功:

      netstat-tunlp | grep 6379   --->查看6379端口是否被佔用

      在客服端鏈接:src/redis-cli -d master -p 6379

③關閉redis服務

     src/redis-cli shutdown

4.配置信息的查看

redis的配置文件位於redis的安裝目錄之下,文件名爲redis.conf。可以通過config命令來查看或設置配置項。

在命令行中查看:

redis localost:6379> config get config_set_name(要查看的配置name)

例如: redis localost:6379> config get loglevel

           1) "loglevel"
                  2) "notice"

使用*號獲取所有配置項:redis localost:6379> config get *

在命令行中編輯:

 redis localost:6379> config set conf_setting_name new_value(要設置的屬性)

例如:redis localost:6379> config get loglevel

            1) "loglevel"

            2) "warning"  -->對當前服務有效,之後當服務重啓之後,纔會失效

5.Redis的安全設置    

設置redis密碼,修改redis.conf

 requirepass root --->將redis密碼修改成爲root

  啓動客戶端:src/redis-cli -h master -p 6379 -a root

至此,redis的單機安裝已經完成~是不是很簡單呢
     

三、redis主從

      由於redis搭建集羣太過麻煩,我在這裏就先不多說了,只是簡單介紹一下一下主從是怎麼實現的,等以後有機會在把redis的分佈式安裝進行一個詳細的介紹。

1.Redis集羣是一個分佈式存儲架構,可以在多個節點之間進行數據共享,解決redis高可用、可擴展等問題。redis集羣提供了兩個好處:

(1)將數據自動切分(split)到多個節點

(2)當集羣中的某一個節點故障時,redis還可以繼續處理客戶端的請求

2.集羣中的主從複製

集羣中的每個節點都有1到N個複製品,其中一個爲主節點,其餘爲從節點,如果主節點下線了,集羣就會把這個主節點的一個節點設置爲新的主節點,繼續工作。這樣,集羣就不會因爲一個主節點的下線而無法正常工作。如果某一個主節點和它所有的從節點都下線的話,redis集羣就停止工作了。

redis集羣不保證數據的強一致性,在特定的情況下,redis集羣會丟失已經執行過得命令。

使用異步複製是redis集羣可能會丟失寫命令的其中一個原因,有時候由於網絡原因,如果網絡斷開時間太長,redis集羣就會啓用新的主節點,之前發給主節點的數據就會丟失。

配置:

配置Master-Slave,只需要在slave上配置master節點的ip和port就可以。

修改redis.conf,在最後一行添加

 slaveof master 6379(代表了主從)

另外需要注意一下slave-read-only 必須要設置爲yes,這表示slave只讀不寫。

四、常用命令

redis的常用命令主要分爲兩個方面:鍵值相關命令,服務器相關命令

1.鍵值相關命令(常用的)

keys * 取出當前所有的key

exisits name 查看redis是否有name這個key

del name 刪除key及對應的value

expire confirm 100  設置confirm這個key100s後過期

ttl confirm 查看confirm這個key還可以存活多久

select 0 選擇0號數據庫,redis中默認有16個庫,0~15

move confirm 1 將當前數據庫中的confirm 移動到其他的數據庫中,

persist confirm 移除confirm這個key的過期時間

rename key2 key3 重命名key2 爲key3

type key2 返回key的數據類型

2.服務器相關命令(常用的)

flushdb 刪除當前選擇數據庫中的所有key

flushall 刪除所有數據庫中的數據庫

dbsize 返回當前數據庫中所有key的數量

select 0~15 編號的數據庫

五、redis支持的五種數據類型

1.string

①設置一個值:set命令:set name hadoop

 在設置的時候可以指定當前key的過期時間

②set key value EX seconds ---->指定key之後seconds的存活時間,seconds之後消失

set name hadoop expire 30

③獲取一個值:get命令  get name

④getrange key start end    返回key中字符串值的子字符[start, end],字符串索引從0開始

 getrange hadoop 0 2  ==》had

⑤getset key value    將給定key的值設爲value,並返回key的舊值(old value)

getset name hive ==》 hadoop

⑥mget key [key1 ...] 一次性獲得多個key所對應的值

⑦ setnx key value    只有在key不存在時設置key的值

⑧ append key value    如果key已經存在並且是一個字符串,APPEND命令將value追加到key原來的值的末尾

2.hash(哈希)

Redis hash 是一個鍵值對集合。Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。

redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
    OK
    redis 127.0.0.1:6379> HGETALL w3ckey
    1) "name"
    2) "redis tutorial"
    3) "description"
    4) "redis basic commands for caching"
    5) "likes"
    6) "20"
    7) "visitors"
    8) "23000"

 常用命令:

命令                                                          描述
       HDEL key field2 [field2]                             刪除一個或多個哈希表字段
       HEXISTS key field                                     查看hash表key中,指定字段是否存在,如果存在返回爲1,反之返回爲0
       HGET key field                                          獲取hash表中指定字段的值
       HGETALL key                                            獲取所有的字段和值
       HINCRBY key field increment                   爲指定字段的整數值加上增量increment
       HINCRBYFLOAT key field increment        爲指定字段的浮點值加上增量increment,只有增的api不能減的api,但是可通過increment爲負數達到減的效果

HKEYS key                                               查看key中的所有字段,相當於java中的map.keySet()

HLEN key                                                  就相當於java中的map的size,map的容量

HMGET key field1 [field2]                         獲取所有給定字段的值

HMSET key f1 v1 [f2 v2]                            同時將多個file-value設置到key中

HSET key field value                                  將哈希表key的field設置爲value

HSETNX key field value                            當在field不存在時,設置相關字段的值.如果存在,設置失敗,返回值爲0,成功設置返回值爲1

3.list(列表)

Redis列表是簡單的字符串列表,按照插入順序排序;你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。

命令                                                     描述

BLPOP key1 [key2 ] timeout                移除並獲取列表中的第一個元素,如果沒有該值,會阻塞列表直到超時【單位是秒s】或發現可彈出元素爲止

BRPOP key1 [key2 ] timeout                移除並獲取列表中的最後一個元素,如果沒有該值,會阻塞列表直到超市或發現可彈出元素爲止

LINDEX key index                                 通過索引獲取列表中的元素

LINSERT key BEFORE|AFTER pivot value    在列表的元素前或後插入元素

LLEN key                                                          獲取列表長度

LPOP key                                                          移出並獲取列表的第一個元素

LPUSH key value1 [value2]                               將一個或多個值插入到列表頭部

LRANGE key start stop                                      獲取列表指定返回內的元素

LREM key count value                                       移出列表元素(count表示刪除多個該value元素)

LSET key index value                                        通過索引設置列表元素的值

LTRIM key start stop                                          對一個列表進行修剪(trim),也就是說,讓列表只保留指定區間內的元素,刪除其它 [start, stop]

RPOP key                                                          移出並獲取列表最後一個元素

RPUSH key value1 [value2]                                在列表尾部中添加一個或多個值

4.set(集合)

Redis的Set是string類型的無序集合,集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。 

命令                                                                   描述

SADD key member1 [member2]                        向集合添加一個或多個成員

SCARD key                                                        獲取集合的成員數(size)

SDIFF key1 [key2]                                              返回給定所有集合的差集(差集就是key1 - (key1 交 key2))

SINTER key1 [key2]                                           返回給定集合的交集

SISMEMBER key member                                 判斷member元素是否是集合key的成員,相當於java中的

                                                                            key.contains(member)

SMEMBERS key                                                 返回集合中所有成員

SREM key member1 [member2]                         移除集合中一個或多個成員

SUNION key1 [key2]                                           返回所有給定集合的並集

SSCAN key cursor [match pattern] [count count]    迭代集合中的元素

5.zset(sorted set:有序集合)

命令                                                                           描述
        zadd key score1 member1  [score2 member2]        向有序集合添加一個或多個成員,或是更新已經存在成員的分數

zcard key                                                                   獲取有序集合的成員數

zcount key min max                                                  計算在有序集合中指定區間分數的成員數,其中min和max的寫法,

                                                                                  必須要以[開頭

zrange key start stop [withscores]                             通過索引區間返回有序集合成指定區間內的成員

zrank key member                                                    返回有序集合中指定成員的索引

zrem key member [member ...]                                移除有序集合中的一個或多個成員

zremrangebylex key min max                                  移除有序集合中給定的字典區間的所有成員

zremrangebyscore key start stop                            移除key中給定的分數區間的所有成員

zrevrange key start stop [withscores]                     返回有序key中指定區間內的成員,通過索引,分數從高到低

zrevrank key memeber                                            返回key中指定成員的排名,key成員按分數值遞減排序

zscore key member                                                 返回key中member的分數

zscan key cursor [match pattern] [COUNT count]    迭代有序集合中的元素(包括元素成員和元素分值)

關於redis的介紹就先進行到這裏吧,其中關於redis中五種數據類型的命令列舉的並不全,只是列舉了其中比較常用的一些,而且關於redis分佈式集羣的搭建也沒有進行說明,這個在我以後的文章中應該會進行一個補充~ 

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