Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。php
官網redis.iogit
Redis與Memcached的比較
1,網絡IO模型
Memcached是多線程,非阻塞IO複用的網絡模型,分爲監聽主線程和worker子線程,監聽線程監聽網絡鏈接,接受請求後,將鏈接描述字pipe 傳遞給worker線程,進行讀寫IO, 網絡層使用libevent封裝的事件庫,多線程模型能夠發揮多核做用.
Redis使用單線程的IO複用模型,本身封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select,對於單純只有IO操做來講,單線程能夠將速度優點發揮到最大.github
2,內存管理方面
Memcached使用預分配的內存池的方式,使用slab和大小不一樣的chunk來管理內存,Item根據大小選擇合適的chunk存儲,內存池的方式能夠省去申請/釋放內存的開銷,而且能減少內存碎片產生,但這種方式也會帶來必定程度上的空間浪費.
Redis使用現場申請內存的方式來存儲數據,而且不多使用free-list等方式來優化內存分配,會在必定程度上存在內存碎片,Redis跟據存儲命令參數,會把帶過時時間的數據單獨存放在一塊兒,並把它們稱爲臨時數據,非臨時數據是永遠不會被剔除的,即使物理內存不夠,致使swap也不會剔除任何非臨時數據(但會嘗試剔除部分臨時數據),這點上Redis更適合做爲存儲而不是cache.redis
3,數據一致性問題
Memcached提供了cas命令,能夠保證多個併發訪問操做同一份數據的一致性問題。 Redis沒有提供cas 命令,並不能保證這點,不過Redis提供了事務的功能,能夠保證一串 命令的原子性,中間不會被任何操做打斷.數據庫
4,存儲方式及其它方面
Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和複製等功能.centos
Redis除key/value以外,還支持list,set,sorted set,hash等衆多數據結構,提供了KEYS進行枚舉操做,但不能在線上使用,若是須要枚舉線上數據,Redis提供了工具能夠直接掃描其dump文件,枚舉出全部數據,Redis還同時提供了持久化和複製等功能.緩存
總結:
Redis使用最佳方式是所有數據in-memory.
Redis更多場景是做爲Memcached的替代者來使用.
當須要除key/value以外的更多數據類型支持時,使用Redis更合適.
當存儲的數據不能被剔除時,使用Redis更合適.
redis通常用於構建實時消息隊列系統或者緩存。服務器
1、安裝redis
centos 6.5 x86_64網絡
wget http://download.redis.io/releases/redis-3.2.9.tar.gz數據結構
tar xzvf redis-3.2.9.tar.gz
cd redis-3.2.9
make && make install
啓動redis
/src/redis-server redis.conf
中止redis
reis-cli shutdown kill -9可能會丟失數據
設置Redis 隨機啓動
vi /etc/rc.local, 在其中加入下面一行代碼
/root/redis-3.2.4/src/redis-server
查看客戶端
列出全部鏈接
client list
殺死某個鏈接
client kill number
獲取慢查詢日誌
slowlog get
清空慢查詢
slowlog reset
探測服務延遲
redis-cli --latency
redis-cli退出quit
設置密碼
config set requirepass 12345
驗證密碼
auth 12345
選擇數據庫
select db-index
默認數據庫是16個
config get 獲取服務器配置信息
config get * 查看全部配置
config set 臨時設置
config rewrite 永久設置,將目前服務器的參數設置寫入redis.conf
2、安裝PHP支持插件
wget https://github.com/nicolasff/phpredis/archive/master.tar.gz
tar xzvf master.tar.gz
cd phpredis-master
phpize
./configure
make && make install
echo "extension = redis.so" >> /etc/php.ini
service php-fpm restart
查看phpinfo
vi phpredis.php
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
echo "Connection to server sucessfully!";
$redis->set('test','hello world!');
echo $redis->get('test');
?>
http://yourseverip/phpredis.php 輸出Connection to server sucessfully! hello world!就成功了。