摘要:語(yǔ)法命令基本語(yǔ)法實(shí)例數(shù)據(jù)類(lèi)型支持五種數(shù)據(jù)類(lèi)型字符串,哈希,列表,集合及有序集合。資源修改文件增加如下內(nèi)容如果在集成環(huán)境的目錄下安裝完成后重啟或。
Redis 簡(jiǎn)介
Redis 是完全開(kāi)源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Redis 優(yōu)勢(shì)性能極高 – Redis能讀的速度是110000次/s,寫(xiě)的速度是81000次/s 。
豐富的數(shù)據(jù)類(lèi)型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類(lèi)型操作。
原子 – Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過(guò)期等等特性。
Redis與其他key-value存儲(chǔ)有什么不同?Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作,這是一個(gè)不同于其他數(shù)據(jù)庫(kù)的進(jìn)化路徑。Redis的數(shù)據(jù)類(lèi)型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明,無(wú)需進(jìn)行額外的抽象。
Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤(pán),所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫(xiě)時(shí)需要權(quán)衡內(nèi)存,應(yīng)為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫(kù)方面的另一個(gè)優(yōu)點(diǎn)是, 相比在磁盤(pán)上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來(lái)非常簡(jiǎn)單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情。 同時(shí),在磁盤(pán)格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問(wèn)。
安裝Redis1.在MacOSX下,用curl命令先下載redis:
$ curl -O http://download.redis.io/releases/redis-2.8.17.tar.gz
如果是Linux系統(tǒng),可用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目錄下會(huì)出現(xiàn)編譯后的redis服務(wù)程序redis-server,還有用于測(cè)試的客戶端程序redis-cli,兩個(gè)程序位于安裝目錄 src 目錄下:
3.啟動(dòng)redis服務(wù)
$ cd src $ ./redis-server
如果看到下面的圖,表示redis安裝成功了^_^
注意上面的方式啟動(dòng)redis 使用的是默認(rèn)配置。也可以通過(guò)啟動(dòng)參數(shù)告訴redis使用指定配置文件使用下面命令啟動(dòng)。
$ cd src $ ./redis-server redis.conf
redis.conf是一個(gè)默認(rèn)的配置文件。我們可以根據(jù)需要使用自己的配置文件。
啟動(dòng)redis服務(wù)進(jìn)程后,就可以使用測(cè)試客戶端程序redis-cli和redis服務(wù)交互了, 比如:
$ cd src $ ./redis-cli redis> set foo bar OK redis> get foo "bar"
這里可以開(kāi)一個(gè)新的命令行窗口,我的redis保存路徑:
Mac:cd /Users/mac/software/redis/redis-2.8.17 Mac:redis-2.8.17 mac$ cd src Mac:src mac$ ./redis-cli
說(shuō)明:
127.0.0.1 是本機(jī) IP ,6379 是 redis 服務(wù)端口?,F(xiàn)在我們輸入 PING 命令。
127.0.0.1:6379> ping PONG
測(cè)試:
Redis 的配置文件位于 Redis 安裝目錄下,文件名為 redis.conf。
你可以通過(guò) CONFIG 命令查看或設(shè)置配置項(xiàng)。
Redis CONFIG 命令格式如下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
實(shí)例
redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
使用 * 號(hào)獲取所有配置項(xiàng):
你可以通過(guò)修改 redis.conf 文件或使用 CONFIG set 命令來(lái)修改配置。
語(yǔ)法
CONFIG SET 命令基本語(yǔ)法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
實(shí)例
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 數(shù)據(jù)類(lèi)型
String(字符串)Redis支持五種數(shù)據(jù)類(lèi)型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string是redis最基本的類(lèi)型,你可以理解成與Memcached一模一樣的類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)value。
string類(lèi)型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象 。
string類(lèi)型是Redis最基本的數(shù)據(jù)類(lèi)型,一個(gè)鍵最大能存儲(chǔ)512MB。
示例:
redis 127.0.0.1:6379> SET name "JackChan" OK redis 127.0.0.1:6379> GET name "JackChan"
在以上實(shí)例中我們使用了 Redis 的 SET 和 GET 命令。鍵為 name,對(duì)應(yīng)的值為JackChan。
注意:一個(gè)鍵最大能存儲(chǔ)512MB。
Redis hash 是一個(gè)鍵值對(duì)集合。
Redis hash是一個(gè)string類(lèi)型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。
示例:
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>
以上實(shí)例中 hash 數(shù)據(jù)類(lèi)型存儲(chǔ)了包含用戶腳本信息的用戶對(duì)象。 實(shí)例中我們使用了 Redis HMSET, HGETALL 命令,user_id:1為鍵值。
每個(gè) hash 可以存儲(chǔ) 232 - 1 鍵值對(duì)(40多億)。
Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾部(右邊)。
示例:
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 推入隊(duì)列
列表最多可存儲(chǔ) 232 - 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。
Redis的Set是string類(lèi)型的無(wú)序集合。
集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。
sadd 命令
添加一個(gè)string元素到,key對(duì)應(yīng)的set集合中,成功返回1,如果元素以及在集合中返回0,key對(duì)應(yīng)的set不存在返回錯(cuò)誤。
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>
注意:以上實(shí)例中 oc 添加了兩次,但根據(jù)集合內(nèi)元素的唯一性,第二次插入的元素將被忽略。
集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
Redis zset 和 set 一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類(lèi)型的分?jǐn)?shù)。redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
zadd 命令
添加元素到集合,元素在集合中存在則更新對(duì)應(yīng)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 性能測(cè)試
Redis 性能測(cè)試是通過(guò)同時(shí)執(zhí)行多個(gè)命令實(shí)現(xiàn)的。
語(yǔ)法
redis 性能測(cè)試的基本命令如下:
redis-benchmark [option] [option value]
實(shí)例:
redis-benchmark在安裝目錄src里邊,下面我們同時(shí)執(zhí)行 10000 個(gè)請(qǐng)求來(lái)檢測(cè)性能:
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 性能測(cè)試工具可選參數(shù)如下所示:
帶有參數(shù)的示例:
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$
以上實(shí)例中主機(jī)為 127.0.0.1,端口號(hào)為 6379,執(zhí)行的命令為 set,lpush,請(qǐng)求數(shù)為 100000,通過(guò) -q 參數(shù)讓結(jié)果只顯示每秒執(zhí)行的請(qǐng)求數(shù)。
開(kāi)始在 PHP 中使用 Redis 前, 我們需要確保已經(jīng)安裝了 redis 服務(wù)及 PHP redis 驅(qū)動(dòng),且你的機(jī)器上能正常使用 PHP。接下來(lái)讓我們安裝 PHP redis 驅(qū)動(dòng):下載地址為:https://github.com/phpredis/phpredis/releases。
PHP安裝redis擴(kuò)展
以下操作需要在下載的 phpredis 目錄中完成:
$ curl -O https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz $ cd phpredis-2.2.7 # 進(jìn)入 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安裝的服務(wù)器,則通過(guò)查看phpinfo的PHP版本是否一致,如果不一致,則說(shuō)明當(dāng)前的路徑為Mac系統(tǒng)自帶的PHP版本。
查看PHP版本:
php -v
打印出來(lái)的是Mac系統(tǒng)自帶的PHP路徑,而我們需要XAMPP安裝的PHP,則需要在/Applications/XAMPP/xamppfiles/bin路徑下找到PHPize安裝的路徑。
XAMPP的PHP版本為5.6.14:
查看當(dāng)前所在目錄命令 pwd
Linux中用 pwd 命令來(lái)查看”當(dāng)前工作目錄“的完整路徑。pwd命令是Print Working Directory的縮寫(xiě)。 簡(jiǎn)單得說(shuō),每當(dāng)你在終端進(jìn)行操作時(shí),你都會(huì)有一個(gè)當(dāng)前工作目錄。
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
出現(xiàn)了這樣的的錯(cuò)誤:
如果出現(xiàn)這樣的錯(cuò)誤,則說(shuō)明phpredis擴(kuò)展包有問(wèn)題,換一個(gè)擴(kuò)展包,再重試下之前的步驟,即可安裝成功。
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$修改php.ini文件
vi /usr/local/php/lib/php.ini
增加如下內(nèi)容:
extension=redis.so
如果在XAMPP集成環(huán)境的目錄下:
extension_dir = "/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/" extension=redis.so
安裝完成后重啟php-fpm 或 apache。查看phpinfo信息,就能看到redis擴(kuò)展。
開(kāi)啟redis服務(wù)MacdeMacBook-Pro-3:phpredis mac$ cd /Users/mac/software/redis/redis-2.8.17/src MacdeMacBook-Pro-3:src mac$ ./redis-serverphp連接到 redis 服務(wù)
connect("127.0.0.1", 6379); echo "Connection to server sucessfully"; //查看服務(wù)是否運(yùn)行 echo "Server is running: " . $redis->ping(); ?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully Server is running: PONG
Redis PHP String(字符串) 實(shí)例
connect("127.0.0.1", 6379); echo "Connection to server sucessfully"; //設(shè)置 redis 字符串?dāng)?shù)據(jù) $redis->set("tutorial-name", "Redis tutorial"); // 獲取存儲(chǔ)的數(shù)據(jù)并輸出 echo "Stored string in redis:: " . $redis->get("tutorial-name"); ?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully Stored string in redis:: Redis tutorial
參考博文:
Redis快速學(xué)習(xí)
【高并發(fā)簡(jiǎn)單解決方案】redis隊(duì)列緩存 + mysql 批量入庫(kù) + php離線整合
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21728.html
摘要:說(shuō)明本文主要學(xué)習(xí)下的模型觀察者,把一點(diǎn)點(diǎn)經(jīng)驗(yàn)分享出來(lái)希望對(duì)別人能有幫助。模型觀察者這個(gè)功能能做很多事情,比如模型更新時(shí)發(fā)個(gè)通知。總結(jié)本篇文章主要學(xué)了下的模型觀察者,發(fā)現(xiàn)這個(gè)功能也能使代碼結(jié)構(gòu)更清晰,覺(jué)得挺好的。 說(shuō)明:本文主要學(xué)習(xí)下Laravel的Model Observer模型觀察者,把一點(diǎn)點(diǎn)經(jīng)驗(yàn)分享出來(lái)希望對(duì)別人能有幫助。同時(shí),作者會(huì)將開(kāi)發(fā)過(guò)程中的一些截圖和代碼黏上去,提高閱讀效率...
摘要:說(shuō)明本文主要講述使用作為緩存加快頁(yè)面訪問(wèn)速度。何不用來(lái)做緩存,等到該達(dá)到一定瀏覽頁(yè)面后再刷新下,效率也很高??勺骶彺嫦到y(tǒng)隊(duì)列系統(tǒng)。 說(shuō)明:本文主要講述使用Redis作為緩存加快頁(yè)面訪問(wèn)速度。同時(shí),作者會(huì)將開(kāi)發(fā)過(guò)程中的一些截圖和代碼黏上去,提高閱讀效率。 備注:作者最近在學(xué)習(xí)github上別人的源碼時(shí),發(fā)現(xiàn)好多在計(jì)算一篇博客頁(yè)面訪問(wèn)量view_count時(shí)都是這么做的:利用Laravel...
閱讀 1726·2021-11-24 09:39
閱讀 3221·2021-11-22 15:24
閱讀 3129·2021-10-26 09:51
閱讀 3319·2021-10-19 11:46
閱讀 2928·2019-08-30 15:44
閱讀 2255·2019-08-29 15:30
閱讀 2571·2019-08-29 15:05
閱讀 816·2019-08-29 10:55