redis

NoSQL

NoSQL,泛指非關(guān)系型數(shù)據(jù)庫颅痊。隨著互聯(lián)網(wǎng)的發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在應(yīng)付超大型和高并發(fā)的網(wǎng)站已經(jīng)新的力不從心牵舵,暴露了很多難以克服的問題沼头,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展阶冈。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題线椰。

NoSQL的四大分類

1.鍵值存儲(chǔ)數(shù)據(jù)庫

這一類數(shù)據(jù)庫只要會(huì)使用一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)尘盼。key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單憨愉、易部署。舉例如:Redis卿捎,Voldemort配紫,Oracle BDB,Tokyo Cabinet/Tyrant

2.列存儲(chǔ)數(shù)據(jù)庫

這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對分布式存儲(chǔ)的海量數(shù)據(jù)娇澎。鍵依然存在笨蚁,但是他們的特點(diǎn)是指向多個(gè)列。這些列是由列家族來安排的趟庄。如:Cassandra, HBase, Riak

3.文檔型數(shù)據(jù)庫

文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的括细,而且它同第一種鍵值存儲(chǔ)相類似。該類型的數(shù)據(jù)模型是版本化的文檔戚啥,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ)奋单,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級(jí)版猫十,允許之間嵌套鍵值览濒。而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高呆盖。如:CouchDB, MongoDb

4.圖形數(shù)據(jù)庫

圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型贷笛,并且能夠擴(kuò)展到多個(gè)服務(wù)器上应又。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型乏苦。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API株扛。如:Neo4J, InfoGrid, Infinite Graph.

NoSQL的適用場景

  • 數(shù)據(jù)模型比較簡單
  • 需要靈活性更強(qiáng)的IT系統(tǒng)
  • 對數(shù)據(jù)庫性能要求較高
  • 不需要高度的數(shù)據(jù)一致性
  • 對于給定key,比較容易映射復(fù)雜值的環(huán)境

Redis

Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)汇荐。和Memcached類似洞就,它支持存儲(chǔ)的value類型相對更多,包括string(字符串)掀淘、list(鏈表)旬蟋、set(集合)、zset(sorted set 有序集合)和hash(哈希類型)革娄。這些數(shù)據(jù)類型都支持push/pop倾贰、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的稠腊。在此基礎(chǔ)上躁染,Redis支持各種不同方式的排序。與Memcached一樣架忌,為了保證效率吞彤,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件叹放,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步饰恕。
Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步井仰,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器埋嵌。這使得Redis可執(zhí)行單層樹復(fù)制。存盤可以有意無意的對數(shù)據(jù)進(jìn)行寫操作俱恶。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制雹嗦,使得從數(shù)據(jù)庫在任何地方同步樹時(shí),可訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄合是。同步對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助了罪。

Redis的安裝

1.windows下的安裝

因?yàn)閞edis官網(wǎng)上沒有msi文件的redis安裝包,所以我們可以點(diǎn)擊下面的鏈接
redis msi下載地址
下載完成后點(diǎn)擊安裝即可

2.ubuntu下安裝(linux下安裝)
  • 使用apt自行安裝
sudo apt-get install Redis`
  • 壓縮包安裝

    1. 到官網(wǎng)下載Redis壓縮包文件
    2. 解壓下載的壓縮包文件
    3. 到解壓的文件下使用make編譯生成可執(zhí)行文件聪全。使用make命令要確保系統(tǒng)中安裝了c語言解釋環(huán)境泊藕。若出錯(cuò)可以安裝gcc,使用下面的命令.
    `sudo apt-get install gcc`

make命令執(zhí)行完成之后难礼,會(huì)在src文件加下生成多個(gè)文件
其中包含有redis-cli娃圆、redis-server玫锋、redis-benchmark、redis-stat文件

        redis-cli:redis命令行操作工具
        redis-server:redis服務(wù)器的deamon啟動(dòng)程序(后臺(tái)程序讼呢,守護(hù)進(jìn)程)
        redis-benchmark:redis的性能測試工具撩鹿,測試redis在你的系統(tǒng)記你的配置下的讀寫性能
        redis-stat:redis狀態(tài)檢測工具,可以檢測redis當(dāng)前狀態(tài)參數(shù)及延遲狀況

k4. 編譯完成之后進(jìn)入src文件夾下進(jìn)行安裝 使用make install命令驗(yàn)
(ll查看src下的目錄吝岭,有redis-server 三痰、redis-cil即可)
5. 建立redis目錄(非必須)
這個(gè)過程不是必須的,只是為了將Redis相關(guān)的資源統(tǒng)一管理而進(jìn)行的操作
建立倆個(gè)文件夾存放redis命令和配置文件

mkdir -p /usr/local/redis/etc`
    `mkdir -p /usr/local/redis/bin`
    把redis.conf 移動(dòng)到/usr/local/redis/etc下窜管,
    `cpredis.conf/usr/local/redis/etc/`

    把的mkreleasehdr.sh、redis-benchmark稚机、redis-check-aof幕帆、redis-check-dump、redis-cli赖条、redis-server
    文件移動(dòng)到bin下失乾,命令:

    `mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin`

6.  配置參數(shù)
    在我們成功安裝Redis后,我們直接執(zhí)行redis-server即可運(yùn)行Redis纬乍,此時(shí)它是按照默認(rèn)配置來運(yùn)行的(默認(rèn)配置甚至不是后臺(tái)運(yùn)行)碱茁。我們希望Redis按我們的要求運(yùn)行,則我們需要修改配置文件仿贬,Redis的配置文件就是redis.conf
    下面是一部分的參數(shù)意義
    *   daemonize:是否以后臺(tái)daemon方式運(yùn)行
    *   bind 127.0.0.1:指定redis只接受來自此ip的請求纽竣,若比設(shè)置,則處理所有請求
    *   pidfule:pid文件位置
    *   port:監(jiān)聽端口
    *   timeout:請求超時(shí)時(shí)間茧泪,0 代表永不超時(shí)
    *   tcp-keepalive 0 :指定tcp連接是否為長連接蜓氨。默認(rèn)為0,表示禁用
    *   loglevel:日志信息級(jí)別队伟,從高到底以此為debug穴吹、verbose、notice和warning
    *   logfile:日志文件位置
    *   database:開啟數(shù)據(jù)庫數(shù)量
    *   dbfilename dump.rbd:存儲(chǔ)數(shù)據(jù)的文件名
    *   dir ./. 存儲(chǔ)數(shù)據(jù)的文件的所在路徑
    *   rdbcompression:是否使用壓縮
    *   save 900 1
        save 300 10
        save 60 10000
        保存數(shù)據(jù)快照的頻率嗜侮,即將數(shù)據(jù)持久化到dump.rdb文件中的頻度港令。用來描述”在多少秒期間至少多少個(gè)變更操作”觸發(fā)snapshot數(shù)據(jù)保存動(dòng)作
        默認(rèn)設(shè)置,意思是:
        if(在60 秒之內(nèi)有10000 個(gè)keys 發(fā)生變化時(shí)){
        進(jìn)行鏡像備份
        }else if(在300 秒之內(nèi)有10 個(gè)keys 發(fā)生了變化){
        進(jìn)行鏡像備份
        }else if(在900 秒之內(nèi)有1 個(gè)keys 發(fā)生了變化){
        進(jìn)行鏡像備份
        }
    *   stop-writes-on-bgsave-error yes:當(dāng)持久化出現(xiàn)錯(cuò)誤時(shí)是否依然進(jìn)行動(dòng)作锈颗,是否終止所有的客戶端write請求顷霹。
        默認(rèn)設(shè)置”yes”表示終止,一旦snapshot數(shù)據(jù)保存故障宜猜,那么此server為只讀服務(wù)泼返。如果為”no”,那么此次snapshot將失敗姨拥,但下一次snapshot不會(huì)受到影響绅喉,不過如果出現(xiàn)故障渠鸽,數(shù)據(jù)只能恢復(fù)到”最近一個(gè)成功點(diǎn)“
    *   slaveof:設(shè)置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫,并為其指定master信息柴罐。
    *   masterauth:主數(shù)據(jù)庫連接需要密碼驗(yàn)證時(shí)徽缚,在這里指定
    *   requirepass :設(shè)置密碼(安全驗(yàn)證)

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

redis的五種基本數(shù)據(jù)類型

  1. string 字符串

  2. set 集合

  3. list 列表

  4. zset 有序集合

  5. hash 對象(哈希類型)

    string類型的操作指令

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. set key value #設(shè)置key對應(yīng)string類型的值,返回1表示成功革屠,0失敗

    image.png

  2. get key # 獲取指定key對應(yīng)的值凿试。如果key不存在,返回nil似芝。如果key的value不是string那婉,就返回錯(cuò)誤

    image.png

  3. setnx key value #若key不存在,設(shè)置value的值党瓮,若存在详炬,則不作操作 get key | 獲取指定key的value值

    image.png

  4. getset key value #先獲取key的值 在設(shè)置可以的值,若可以不存在寞奸,則返回nil

    image.png

  5. mget k1 k2 ... #獲取多個(gè)key的值呛谜,若對應(yīng)的key不存在,則返回nil

  6. mset k1 v1 k2 v2 ... #一次設(shè)置多個(gè)key的值枪萄,成功返回1隐岛,表示所有的值都設(shè)置成功,返回0表示沒有任何值被設(shè)置

  7. msernx k1 v1 k2 v2 ... #設(shè)置多個(gè)key的值瓷翻,但是不會(huì)覆蓋已經(jīng)存在的key

  8. setex key second value #設(shè)置指定key的值聚凹,并設(shè)置它的失效時(shí)間(秒)

  9. psetex key millionseconds value #和setex一樣,唯一的區(qū)別是時(shí)間一毫秒為單位

  10. incr key # 對key的值加1逻悠,只對數(shù)據(jù)字符串有效

  11. incrby key value #對key的值加value元践,只對數(shù)據(jù)字符串有效

  12. decr key #對key的值減1

  13. decrby key value #對key的值減value

  14. strlen key #求對應(yīng)key的值的長度

  15. append key value #對key對應(yīng)的值及進(jìn)行拼接(從末尾拼接)

  16. getrange key start end #獲取指定起始和結(jié)束為止的key的值的子串

  17. setrange key offset value # 覆蓋key對應(yīng)值的指定位置的字符,offset為偏移量童谒,value時(shí)在offset后放置的值单旁。這個(gè)命令可以確保key有一個(gè)足夠大的字符串

  18. setbit key offset value #設(shè)置或者清空key的value(字符串)在offset處的bit值

  19. scan curssor [match pattern][COUNT count] #迭代當(dāng)前數(shù)據(jù)庫中key的集合

  20. getbit key offset #返回key對應(yīng)的string在offset處的bit值

  21. bitcount key [start end] #統(tǒng)計(jì)字符串被設(shè)置為1的bit數(shù)。將字符串轉(zhuǎn)化成二進(jìn)制饥伊,統(tǒng)計(jì)為1的數(shù)量

</pre>

hash類型的操作指令

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. hdel key field [field...] 從key指定的哈希集中移除指定的屬性
  2. hexists key field # 返回對應(yīng)hash中field知否存在象浑。1表示存在,0表示不存在
  3. hget key field #獲取指定hash中給字段field的值
  4. hgetall key #獲取hash中所有字段和值琅豆,每個(gè)字段名后就是字段對應(yīng)的值
  5. hincrby key field value #增加key對應(yīng)的哈希集中制定的數(shù)值(value)
  6. hiincrbyfloat key field vaue #和hincrby一樣愉豺,區(qū)別是加的值為float
  7. hkeys key #獲取指定哈希集的所有字段的名字
  8. hlen key #獲取指定哈希集包含的字段的長度
  9. hmget key field [field...] #返回key對應(yīng)哈希集中指定的字段的值
  10. hmget key field value [field value] #設(shè)置指定的哈希集中指定的字段的值
  11. hscan key cursor [match pattern][COUNT count] #迭代hash類型中的鍵值對
  12. hset key field value #設(shè)置哈希集中指定字段的值如果字段在哈希集中存在,它將被重寫茫因。
  13. hsernx key field value #設(shè)置哈希集中指定字段的值蚪拦,如存在則不作操作
  14. hstrlen key field #返回哈希集中指定字段對應(yīng)的值的長度
  15. hvals key #返回哈希集中所有的字段的值

</pre>

list類型的操作指令

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">

  1. blpop key [key ...] timeout
  2. brpop key [key ...] timeout
  3. lindex key index #獲取索引位對應(yīng)的元素
  4. linsert key before|after pivot value #把value插入到pivot前面或后面
  5. llen key #但是key對應(yīng)的list的長度
  6. lpop key #移除并飯后key對應(yīng)的list的第一個(gè)元素
  7. lpush key value [value...] #從左(頭)側(cè)將值放入list中
  8. rpush key value [value...] #從右(尾)側(cè)將值放入list中
  9. lpushx key value #只有當(dāng)key對應(yīng)的list存在才會(huì)從頭部插入value
  10. lrange key start stop #循環(huán)顯示list的值
  11. lrem key count value #從存于 key 的列表里移除前 count 次出現(xiàn)的值為 value 的元素。 這個(gè) count 參數(shù)通過下面幾種方式影響這個(gè)操作:
  12. count > 0: 從頭往尾移除值為 value 的元素。
  13. count < 0: 從尾往頭移除值為 value 的元素驰贷。
  14. count = 0: 移除所有值為 value 的元素盛嘿。

</pre>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市括袒,隨后出現(xiàn)的幾起案子次兆,更是在濱河造成了極大的恐慌,老刑警劉巖锹锰,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥炭,死亡現(xiàn)場離奇詭異,居然都是意外死亡恃慧,警方通過查閱死者的電腦和手機(jī)园蝠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糕伐,“玉大人砰琢,你說我怎么就攤上這事×记疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵训唱,是天一觀的道長褥蚯。 經(jīng)常有香客問我,道長况增,這世上最難降的妖魔是什么赞庶? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮澳骤,結(jié)果婚禮上歧强,老公的妹妹穿的比我還像新娘。我一直安慰自己为肮,他們只是感情好摊册,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颊艳,像睡著了一般茅特。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棋枕,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天白修,我揣著相機(jī)與錄音,去河邊找鬼重斑。 笑死兵睛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祖很,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笛丙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了突琳?” 一聲冷哼從身側(cè)響起若债,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拆融,沒想到半個(gè)月后蠢琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镜豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年傲须,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趟脂。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泰讽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昔期,到底是詐尸還是另有隱情已卸,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布硼一,位于F島的核電站累澡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏般贼。R本人自食惡果不足惜愧哟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哼蛆。 院中可真熱鬧蕊梧,春花似錦、人聲如沸腮介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萤厅。三九已至橄抹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惕味,已是汗流浹背楼誓。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留名挥,地道東北人疟羹。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榄融。 傳聞我的和親對象是個(gè)殘疾皇子参淫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容