Redis Installation、Configuration、Program Based On Redis Learning

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   os   io   

目錄

1. Redis 簡介2. Redis安裝配置3. 編程使用Redis

 

1. Redis 簡介

0x1: Redis是什麼

Redis是一款Nosql類型的基於key-value的快取系統,

從架構上看,redis有3種特性

1. key value store是一個以key-value形式儲存的資料庫,定位直指MySQL,用來作為唯一的儲存系統2. memory cache是一個把資料存放區在記憶體中的快取,用來在應用和資料庫間提供緩衝,替代memcachd3. data structrue server把它支援對複雜資料結構的高速操作作為賣點,提供某些特殊業務情境的計算和展現需求。比如熱門排行榜應用,Top 10之類的

在redis的索引值的"值"中,它所支援的資料結構有:

1. String    1) 常用命令      set、get、decr、incr、mget等      2) 應用情境      String是最常用的一種資料類型,普通的key/value儲存都可以歸為此類       3) 實現方式      String在redis內部儲存預設就是一個字串,被redisObject所引用,當遇到incr、decr等操作時會轉成數值型進行計算,此時redisObject的encoding欄位為int2. Hash    1) 常用命令      hget、hset、hgetall等      2) 應用情境    3) 實現方式      Redis Hash對應Value內部實際就是一個HashMap,實際這裡會有2種不同實現        3.1) 這個Hash的成員比較少時Redis為了節省記憶體會採用類似一維數組的方式來緊湊儲存,而不會採用真正的HashMap結構,對應的value redisObject的encoding為zipmap        3.2) 當成員數量增大時會自動轉成真正的HashMap,此時encoding為ht3. List    1) 常用命令      lpush、rpush、lpop、rpop、lrange等      2) 應用情境      Redis list的應用情境非常多,也是Redis最重要的資料結構之一,比如twitter的關注列表,粉絲列表等都可以用Redis的list結構來實現       3) 實現方式      Redis list的實現為一個雙向鏈表,即可以支援反向尋找和遍曆,更方便操作,不過帶來了部分額外的記憶體開銷,Redis內部的很多實現,包括髮送緩衝隊列等也都是用的這個資料結構4. Set    1) 常用命令      sadd、spop、smembers、sunion等       2) 應用情境      Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的,當你需要儲存一個列表資料,又不希望出現重複資料時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集
合內的重要介面,這個也是list所不能提供的   3) 實現方式:   set的內部實現是一個value永遠為null的HashMap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合內的原因5. Sorted set 1) 常用命令   zadd、zrange、zrem、zcard等   2) 使用情境   Redis sorted set的使用情境與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供一個優先順序(score)的參數來為成員排序,並且是插入有序的,即自動排序。當你需要一個有序的並且不重複的集
合列表,那麼可以選擇sorted set資料結構,比如twitter 的public timeline可以以發表時間作為score來儲存,這樣擷取時就是自動按時間排好序的   3) 實現方式   Redis sorted set的內部使用HashMap和跳躍表(SkipList)來保證資料的儲存和有序,HashMap裡放的是成員到score的映射,而跳躍表裡存放的是所有的成員,排序依據是HashMap裡存的score,使用跳躍表的結構可以獲
得比較高的尋找效率,並且在實現上比較簡單

Redis內部使用一個redisObject對象來表示所有的key和value

1. type代表一個value對象具體是何種資料類型2. encoding不同資料類型在redis內部的儲存方式,比如:type=string代表value儲存的是一個一般字元串,那麼對應的encoding可以是raw或者是int,如果是int則代表實際redis內部是按數值型類儲存和表示這個字串的,當然前提是這個
字串本身可以用數值表示,比如:"123" "456"這樣的字串3. ptr資料指標4. vm只有開啟了Redis的虛擬記憶體功能,此欄位才會真正的分配記憶體,該功能預設是關閉狀態的

我們可以發現Redis使用redisObject來表示所有的key/value資料是比較浪費記憶體的,當然這些記憶體管理成本的付出主要也是為了給Redis不同資料類型提供一個統一的管理介面

Relevant Link:

http://try.redis.io/http://www.redis.cn/http://jandyu.diandian.com/post/2012-03-15/16145594http://tech.it168.com/a2011/0818/1234/000001234478_all.shtmlhttp://hedatou.com/archives/introduction_to_redis.html

 

2. Redis安裝配置

0x1: 主程式安裝

cd /usr/localwget http://download.redis.io/releases/redis-2.8.13.tar.gztar xzf redis-2.8.13.tar.gzcd redis-2.8.13make/*make命令執行完成後,會在當前src目錄(/usr/local/redis-2.8.13/src)下產生本個可執行檔如下:1. redis-server:Redis伺服器的daemon啟動程式2. redis-cli:Redis命令列操作工具。當然,你也可以用telnet根據其純文字協議來操作3. redis-benchmark:Redis效能測試工具,測試Redis在你的系統及你的配置下的讀寫效能4. redis-stat:Redis狀態偵查工具,可以檢測Redis目前狀態參數及延遲狀況 */

0x2: 命令測試

//啟動server./redis-server//測試benchmark./redis-benchmark//使用內建的用戶端串連Redis./redis-cli127.0.0.1:6379> set foo barOK127.0.0.1:6379> get foo"bar"127.0.0.1:6379>

0x3: 運行Redis所需要的核心參數最佳化

/*1. overcommit_memory指定了核心針對記憶體配置的策略,其值可以是0、1、2。0: 表示核心將檢查是否有足夠的可用記憶體供應用進程使用    1) 如果有足夠的可用記憶體,記憶體申請允許    2) 否則,記憶體申請失敗,並把錯誤返回給應用進程1: 表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何2: 表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體*/vim /etc/sysctl.conf//添加vm.overcommit_memory=1//重新整理配置使之生效sysctl vm.overcommit_memory=1 

0x4: Redis設定檔

vim /usr/local/redis-2.8.13/redis.conf//1. 開啟守護進程daemonize yes //2. 每隔5秒輸出一行監控資訊(預設)daemonize no//3. 減小改變次數,這個參數可以根據情況進行指定save 60 1000 //4. 分配256M記憶體maxmemory 256000000   //5. pid檔案位置pidfile /var/run/redis.pid //6. 監聽的連接埠號碼port 6379//7. 請求逾時時間timeout 0//8. log資訊層級loglevel notice//9. 開啟資料庫的數量databases 16/*10. 儲存快照的頻率    1) 第一個*表示多長時間    2) 第二個*表示執行多少次寫操作在一定時間內執行一定數量的寫操作時,自動儲存快照。可設定多個條件*/save * *//11. 是否使用壓縮rdbcompression yese//12. 資料快照檔案名稱(只是檔案名稱,不包括目錄)dbfilename dump.rdb//13. 資料快照的儲存目錄(這個是目錄)dir .///14. 是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高資料抗風險能力,但影響效率appendonly no/*15. appendonlylog如何同步到磁碟    1) always: 每次寫都強制調用fsync    2) everysec: 每秒啟用一次fsync    3) no: 不調用fsync等待系統自己同步*/ appendfsync everysec

配置好儲存,重啟redis,就可以正常啟動了,和mysql一樣,redis是基於socket監聽連接埠的方式提供服務的,我們可以使用telnet、或者socket方式進行串連

Relevant Link:

http://www.redis.cn/documentation.htmlhttp://www.redis.cn/download.htmlhttp://www.php100.com/html/webkaifa/PHP/PHPyingyong/2011/0406/7873.html

 

3. 編程使用Redis

0x1: PHP串連Redis

使用php串連redis需要安裝php的擴充

下載redis擴充原始碼http://pecl.php.net/package/redis解壓縮後進行編譯phpize./configure --enable-hellomake關於php擴充的原理以及編譯過程請參閱另一篇文章http://www.cnblogs.com/LittleHann/p/3562259.html將編譯好的.so檔案複製到php的擴充目錄中cp redis.so /usr/lib/php/modules/修改php.ini中的extension,增加redis擴充的自動啟動重啟apache即可

Code

<?php      $redis = new redis();      $result = $redis->connect(‘192.168.207.128‘, 6379);      var_dump($result); //結果:bool(true)      $result = $redis->set(‘name‘,"LittleHann");      var_dump($result); //結果:bool(true)      $result = $redis->get(‘name‘);     var_dump($result); //結果:LittleHann     $redis->delete(‘name‘);      var_dump($result); //結果:bool(true)  ?>  

Relevant Link:

https://github.com/nrk/predishttps://github.com/Shumkov/Rediskahttps://github.com/jdp/redisenthttp://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.htmlhttp://blog.51yip.com/cache/1439.htmlhttp://www.cnblogs.com/jackluo/p/3412670.html

0x2: Java串連Redis

Relevant Link:

http://outofmemory.cn/code-snippet/128/java-usage-redis-jiandan-usagehttp://www.cnblogs.com/edisonfeng/p/3571870.html

 

Copyright (c) 2014 LittleHann All rights reserved

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.