Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。
Redis 與其餘 key - value 緩存產品有如下三個特色:php
Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。html
Redis不只僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。java
Redis支持數據的備份,即master-slave模式的數據備份。python
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。mysql
豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。ios
原子 – Redis的全部操做都是原子性的,同時Redis還支持對幾個操做全並後的原子性執行。laravel
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。c++
Redis有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。git
Redis運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,應爲數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是, 相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣Redis能夠作不少內部複雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。程序員
1.在MacOSX下,用curl命令先下載redis:
$ curl -O http://download.redis.io/releases/redis-2.8.17.tar.gz
若是是Linux系統,可用wget命令下載:
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
2.解壓並安裝
$ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make
make完後 redis-2.8.17目錄下會出現編譯後的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下:
3.啓動redis服務
$ cd src $ ./redis-server
若是看到下面的圖,表示redis安裝成功了^_^
注意上面的方式啓動redis 使用的是默認配置。也能夠經過啓動參數告訴redis使用指定配置文件使用下面命令啓動。
$ cd src $ ./redis-server redis.conf
redis.conf是一個默認的配置文件。咱們能夠根據須要使用本身的配置文件。
啓動redis服務進程後,就可使用測試客戶端程序redis-cli和redis服務交互了, 好比:
$ cd src $ ./redis-cli redis> set foo bar OK redis> get foo "bar"
這裏能夠開一個新的命令行窗口,個人redis保存路徑:
Mac:cd /Users/mac/software/redis/redis-2.8.17 Mac:redis-2.8.17 mac$ cd src Mac:src mac$ ./redis-cli
說明:
127.0.0.1 是本機 IP ,6379 是 redis 服務端口。如今咱們輸入 PING 命令。
127.0.0.1:6379> ping PONG
測試:
Redis 的配置文件位於 Redis 安裝目錄下,文件名爲 redis.conf。
你能夠經過 CONFIG 命令查看或設置配置項。
Redis CONFIG 命令格式以下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
實例
redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
使用 * 號獲取全部配置項:
你能夠經過修改 redis.conf 文件或使用 CONFIG set 命令來修改配置。
語法
CONFIG SET 命令基本語法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
實例
redis 127.0.0.1:6379> CONFIG SET loglevel "notice" OK redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string是redis最基本的類型,你能夠理解成與Memcached如出一轍的類型,一個key對應一個value。
string類型是二進制安全的。意思是redis的string能夠包含任何數據。好比jpg圖片或者序列化的對象 。
string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。
示例:
redis 127.0.0.1:6379> SET name "JackChan" OK redis 127.0.0.1:6379> GET name "JackChan"
在以上實例中咱們使用了 Redis 的 SET 和 GET 命令。鍵爲 name,對應的值爲JackChan。
注意:一個鍵最大能存儲512MB。
Redis hash 是一個鍵值對集合。
Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
示例:
127.0.0.1:6379> HMSET user_id:1 name jackcheng age 25 address HongKong OK 127.0.0.1:6379> HGETALL user_id:1 1) "name" 2) "jackcheng" 3) "age" 4) "25" 5) "address" 6) "HongKong" 127.0.0.1:6379>
以上實例中 hash 數據類型存儲了包含用戶腳本信息的用戶對象。 實例中咱們使用了 Redis HMSET, HGETALL 命令,user_id:1爲鍵值。
每一個 hash 能夠存儲 232 - 1 鍵值對(40多億)。
Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素導列表的頭部(左邊)或者尾部(右邊)。
示例:
127.0.0.1:6379> lpush language php (integer) 1 127.0.0.1:6379> lpush language c (integer) 2 127.0.0.1:6379> lpush language java (integer) 3 127.0.0.1:6379> lpush language python (integer) 4 127.0.0.1:6379> lrange language 0 5 1) "python" 2) "java" 3) "c" 4) "php" 127.0.0.1:6379>
l ->list 列表 push 推入隊列
列表最多可存儲 232 - 1 元素 (4294967295, 每一個列表可存儲40多億)。
Redis的Set是string類型的無序集合。
集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是O(1)。
sadd 命令
添加一個string元素到,key對應的set集合中,成功返回1,若是元素以及在集合中返回0,key對應的set不存在返回錯誤。
sadd key member
示例:
127.0.0.1:6379> sadd pragmmer c++ (integer) 1 127.0.0.1:6379> sadd pragmmer oc (integer) 1 127.0.0.1:6379> sadd pragmmer oc (integer) 0 127.0.0.1:6379> smembers pragmmer 1) "c++" 2) "oc" 127.0.0.1:6379>
注意:以上實例中 oc 添加了兩次,但根據集合內元素的惟一性,第二次插入的元素將被忽略。
集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員)。
Redis zset 和 set 同樣也是string類型元素的集合,且不容許重複的成員。
不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。
zset的成員是惟一的,但分數(score)卻能夠重複。
zadd 命令
添加元素到集合,元素在集合中存在則更新對應score
zadd key score member
示例:
127.0.0.1:6379> zadd mytest 9 laravel (integer) 1 127.0.0.1:6379> zadd mytest 1 php (integer) 1 127.0.0.1:6379> zadd mytest 3 ios (integer) 1 127.0.0.1:6379> zadd mytest 2 php (integer) 0 127.0.0.1:6379> ZRANGEBYSCORE mytest 0 10 1) "php" 2) "ios" 3) "laravel" 127.0.0.1:6379>
Redis 性能測試是經過同時執行多個命令實現的。
語法
redis 性能測試的基本命令以下:
redis-benchmark [option] [option value]
實例:
redis-benchmark在安裝目錄src裏邊,下面咱們同時執行 10000 個請求來檢測性能:
MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -n 10000 ====== PING_INLINE ====== 10000 requests completed in 0.25 seconds 50 parallel clients 3 bytes payload keep alive: 1 48.44% <= 1 milliseconds 98.32% <= 2 milliseconds 99.51% <= 6 milliseconds 100.00% <= 6 milliseconds 39215.69 requests per second ... ... ====== MSET (10 keys) ====== 10000 requests completed in 0.38 seconds 50 parallel clients 3 bytes payload keep alive: 1
redis 性能測試工具可選參數以下所示:
帶有參數的示例:
MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q SET: 29904.30 requests per second LPUSH: 25094.10 requests per second MacdeMacBook-Pro-3:src mac$
以上實例中主機爲 127.0.0.1,端口號爲 6379,執行的命令爲 set,lpush,請求數爲 100000,經過 -q 參數讓結果只顯示每秒執行的請求數。
開始在 PHP 中使用 Redis 前, 咱們須要確保已經安裝了 redis 服務及 PHP redis 驅動,且你的機器上能正常使用 PHP。接下來讓咱們安裝 PHP redis 驅動:下載地址爲:https://github.com/phpredis/phpredis/releases。
PHP安裝redis擴展
如下操做須要在下載的 phpredis 目錄中完成:
$ curl -O https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz $ cd phpredis-2.2.7 # 進入 phpredis 目錄 $ /usr/local/php/bin/phpize # php安裝後的路徑 $ ./configure --with-php-config=/usr/local/php/bin/php-config $ make && make install
phpredis資源
https://github.com/michael-grunder/phpredis.git
注意:這裏若是是使用的XAMPP安裝的服務器,則經過查看phpinfo的PHP版本是否一致,若是不一致,則說明當前的路徑爲Mac系統自帶的PHP版本。
查看PHP版本:
php -v
打印出來的是Mac系統自帶的PHP路徑,而咱們須要XAMPP安裝的PHP,則須要在/Applications/XAMPP/xamppfiles/bin路徑下找到PHPize安裝的路徑。
XAMPP的PHP版本爲5.6.14:
查看當前所在目錄命令 pwd
Linux中用 pwd 命令來查看」當前工做目錄「的完整路徑。pwd命令是Print Working Directory的縮寫。 簡單得說,每當你在終端進行操做時,你都會有一個當前工做目錄。
MacdeMacBook-Pro-3:bin mac$ pwd /Applications/XAMPP/xamppfiles/bin
XAMPP的PHP安裝的phpsize就在該路徑下:
/Applications/XAMPP/xamppfiles/bin/phpize
acdeMacBook-Pro-3:phpredis mac$ ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
MacdeMacBook-Pro-3:phpredis-3.0.0 mac$ sudo make && make install
出現了這樣的的錯誤:
若是出現這樣的錯誤,則說明phpredis擴展包有問題,換一個擴展包,再重試下以前的步驟,便可安裝成功。
phpredis資源
https://github.com/michael-grunder/phpredis.git
Installing shared extensions: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/ MacdeMacBook-Pro-3:phpredis mac$
vi /usr/local/php/lib/php.ini
增長以下內容:
extension=redis.so
若是在XAMPP集成環境的目錄下:
extension_dir = "/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/" extension=redis.so
安裝完成後重啓php-fpm 或 apache。查看phpinfo信息,就能看到redis擴展。
<?php echo phpinfo(); ?>
MacdeMacBook-Pro-3:phpredis mac$ cd /Users/mac/software/redis/redis-2.8.17/src MacdeMacBook-Pro-3:src mac$ ./redis-server
<?php //鏈接本地的 Redis 服務 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //查看服務是否運行 echo "Server is running: " . $redis->ping(); ?>
執行腳本,輸出結果爲:
Connection to server sucessfully Server is running: PONG
Redis PHP String(字符串) 實例
<?php //鏈接本地的 Redis 服務 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //設置 redis 字符串數據 $redis->set("tutorial-name", "Redis tutorial"); // 獲取存儲的數據並輸出 echo "Stored string in redis:: " . $redis->get("tutorial-name"); ?>
執行腳本,輸出結果爲:
Connection to server sucessfully Stored string in redis:: Redis tutorial