忙裡偷閒啊...
1 <?php 2 /** 3 * Description: Redis 4 * Create date:2015-10-11 17:27 5 * Author: zhaoyingnan 6 **/ 7 8 /* 9 __construct,__destruct,connect,pconnect,close,ping,echo,get,set, 10 setex,psetex,setnx,getSet,randomKey,renameKey,renameNx,getMultiple,exists,delete, 11 incr,incrBy,incrByFloat,decr,decrBy,type,append,getRange,setRange,getBit, 12 setBit,strlen,getKeys,sort,sortAsc,sortAscAlpha,sortDesc,sortDescAlpha,lPush,rPush, 13 lPushx,rPushx,lPop,rPop,blPop,brPop,lSize,lRemove,listTrim,lGet, 14 lGetRange,lSet,lInsert,sAdd,sSize,sRemove,sMove,sPop,sRandMember,sContains, 15 sMembers,sInter,sInterStore,sUnion,sUnionStore,sDiff,sDiffStore,setTimeout,save,bgSave, 16 lastSave,flushDB,flushAll,dbSize,auth,ttl,pttl,persist,info,resetStat, 17 select,move,bgrewriteaof,slaveof,object,bitop,bitcount,bitpos,mset,msetnx, 18 rpoplpush,brpoplpush,zAdd,zDelete,zRange,zReverseRange,zRangeByScore,zRevRangeByScore,zCount,zDeleteRangeByScore, 19 zDeleteRangeByRank,zCard,zScore,zRank,zRevRank,zInter,zUnion,zIncrBy,expireAt,pexpire, 20 pexpireAt,hGet,hSet,hSetNx,hDel,hLen,hKeys,hVals,hGetAll,hExists, 21 hIncrBy,hIncrByFloat,hMset,hMget,multi,discard,exec,pipeline,watch,unwatch, 22 publish,subscribe,psubscribe,unsubscribe,punsubscribe,time,eval,evalsha,script,dump, 23 restore,migrate,getLastError,clearLastError,_prefix,_serialize,_unserialize,client,scan,hscan, 24 zscan,sscan,getOption,setOption,config,slowlog,getHost,getPort,getDBNum,getTimeout, 25 getReadTimeout,getPersistentID,getAuth,isConnected,wait,pubsub,open,popen,lLen,sGetMembers, 26 mget,expire,zunionstore,zinterstore,zRemove,zRem,zRemoveRangeByScore,zRemRangeByScore,zRemRangeByRank,zSize, 27 substr,rename,del,keys,lrem,ltrim,lindex,lrange,scard,srem, 28 sismember,zrevrange,sendEcho,evaluate,evaluateSha, 29 */ 30 //PHP 中 Redis 的可操作的方法 31 $ReRedis = new ReflectionClass('Redis'); 32 $arMethods = $ReRedis->getMethods(); 33 $arMethods = objarray_to_array($arMethods); 34 //print_r($arMethods); 35 function objarray_to_array($obj) { 36 $ret = array(); 37 foreach ($obj as $key => $value) { 38 if (gettype($value) == "array" || gettype($value) == "object"){ 39 $ret[$key] = objarray_to_array($value); 40 }else{ 41 $ret[$key] = $value; 42 } 43 } 44 return $ret; 45 } 46 $i = 1; 47 foreach($arMethods as $arVal) 48 echo $arVal['name'],','; 49 50 /****************************** Redis 介紹 ************************************/ 51 //Redis,一款 內存高速緩存數據庫,數據模型為 key-value 52 //Redis 可持久化,(即它會將數據保存自硬盤中)保證了數據的安全 53 //Redis 豐富的數據類型:string,list,hash,set,sorted set 54 55 56 /****************************** Redis 和 Memcached比較 ************************/ 57 // Redis 不僅僅支持簡單的 key-value ,同時還提供list,set,hash等數據結構的存儲 58 // Redis 支持 master-slave(主-從)模式應用 59 // Redis 支持數據的持久化,可以將內存中的數據村春在硬盤中,重啟、斷電的時候並不會丟失數據 60 // Redis 單個 value 的最大限制的 1GB,Memcached 只能保存 1MB 61 62 63 /****************************** Redis 中對 key 的操作 *************************/ 64 /** 65 * eixists key 測試指定的 key 是否存在 66 * del key1 key2 key3 ... 刪除給定的 key 67 * type key 返回給定的 key 的 value 類型 68 * keys pattern 返回匹配指定模式的所有的 key 69 * rename oldkeyname newkeyname 改名字 70 * dbsize 返回當前數據庫的 key 的數量 71 * expire key seconds 為 key 設置過期時間 72 * ttl key 返回 key 的剩余過期時間 73 * select db-index 選擇數據庫(0-15) 74 * move key db-index 將 key 從當前數據庫移動到指定的數據庫 75 * flushdb 刪除當前數據庫中的所有的 key 76 * flushall 刪除所有數據庫中所有 key 77 **/ 78 79 80 /****************************** Redis 中對 string 類型的操作 ********************/ 81 /** 82 * set key value 設置 key 對應的值為 string 類型的 value 83 * mset key1 value1 key2 value2 keyN valueN 一次性設置多個 key 的值 84 * mget key1 key2 keyN 一次性獲取多個 key 的值 85 * incr key 對 key 的值進行自增操作,步進值為1,並返回新的值 86 * decr key 對 key 的值進行自減操作,步進值為1,並返回新的值 87 * incrby key integer 同 incr ,但是步進值為指定的 integer ,並返回新的值 88 * decrby key integer 同 decr ,但是步進值為指定的 integer ,並返回新的值 89 * append key value 給指定的 key 對應的值追加 value 90 * substr key start end 返回截取過的 key 對應的值,包括開始和結束的位置,下標從0開始 91 **/ 92 93 94 /****************************** Redis 中對 list 類型的操作 ***********************/ 95 //list 類型是一個雙向鏈表,通過 push,pop 操作從鏈表的頭部或者尾部添加或刪除元素。 96 //應用的場景:獲得最新登錄的10個用戶的信息 97 /** 98 * lpush key value 在 key 對應的 list 的頭部添加 value 元素,返回 list 中元素的個數 99 * rpush key value 在 key 對應的 list 的尾部添加 value 元素,返回 list 中元素的個數 100 * rpop key 在 key 對應的 list 的尾部刪除一個元素,並返回該元素的內容 101 * lpop key 在 key 對應的 list 的頭部刪除一個元素,並返回該元素的內容 102 * llen key 返回 key 對應的 list 的中元素的個數,若不存在則為0,若不是 list 類型則報錯 103 * lrange key start end 返回 key 對應的 list 的中指定區間內的元素,包括開始和結束的位置,下標從0開始 104 * ltrim key start key 截取 list,保留指定區間內的元素 105 **/ 106 107 108 /****************************** Redis 中對 set 類型的操作 *************************/ 109 //set 無序集合,每個集合的元素是不會重復的,最多可以包含2的32次方個元素(交集、並集、差集) 110 //應用場景:QQ好友推薦,你和張三的共同好友 111 /** 112 * sadd key member 添加一個 member 元素到 key 對應的 set 集合中,成功返回1,若元素已經存在,返回0 113 * sren key member1 memberN 從 key 對應的 set 集合中刪除給定的元素,成功返回1 114 * scard key 返回 key 對應的 set 集合中的元素個數 115 * smembers key 返回 key 對應的 set 集合中的所有元素,是無序的 116 * sismember key member 判斷 member 在 key 對應的 set 集合中是否存在,存在返回 1,否則為0 117 * smove key1 key2 member 將 key1 對應的 set 集合中的 member 移動到 key2 對應的 set 集合中 118 * sinter key1 key2 keyN 返回所有給定 key 對應的 set 集合的交集 119 * sunion key1 key2 keyN 返回所有給定 key 對應的 set 集合的並集 120 * sdiff key1 key2 keyN 返回所有給定 key 對應的 set 集合的差集 121 **/ 122 123 124 /****************************** Redis 中對 sorted set 類型的操作 *******************/ 125 //sorted set 排序的集合,與 set 集合不同,它每個集合中的每個元素都是值、權重的組合 126 //應用場景:排行榜 127 /** 128 * zadd key score member 添加元素到 key 對應的 set 集合,其中值為 member,權重為 score 129 * zrem key member 刪除 key 對應的 set 集合中指定的元素 member 130 * zincrby key incr member 按照 incr 幅度增加 key 對應的 set 集合中 member 元素的 score 權重值 131 * zrank key member 返回指定元素 member 在 key 對應的 set 集合中的排名下標,排名按 score 小到大,下標0開 132 * zrevrank key member 返回指定元素 member 在 key 對應的 set 集合中的排名下標,排名按 score 大到小,下標0開 133 * zrange key start end 返回 key 對應的 set 集合中指定區間的元素的值,排序安 score 小到大,下標0開,含始末 134 * zrevrange key start end 返回 key 對應的 set 集合中指定區間的元素的值,排序安 score 大到小,下標0開,含始末 135 * zcard key 返回 key 對應的 set 集合中的元素個數 136 * zscore key member 返回 key 對應的 set 集合中給定的值為 member 的元素的 score 的值 137 * zremrangebyrank key min max 刪除 key 對應的 set 集合中排名在給定區間的元素(按 score 小到大排序) 138 **/ 139 140 141 /****************************** Redis 數據持久化 ************************************/ 142 /** 143 * snap shotting 快照持久化 144 * 默認開啟了該功能,一次性將 Redis 中的全部數據保存一份在硬盤中,數據非常多的話並不適合頻繁地執行該操作 145 * redis.conf 146 * 快照持久化的備份頻率(數據修改的頻率高/低,則備份頻率也高/低) 147 * save 900 1 #900 秒內如果超過 1 個 key 被修改,則發起一次快照保存 148 * save 300 10 #300 秒內如果超過 10 個 key 被修改,則發起一次快照保存 149 * save 60 10000 #60 秒內如果超過 10000 個 key 被修改,則發起一次快照保存 150 * dbfilename dump.rdb #備份的文件名稱 151 * dir ./ #備份文件的保存路徑 152 * 手動發起一次快照持久化 153 * redis-cli -h 127.0.0.1 -p 6379 bgsave #手動發起一次快照持久化 154 **/ 155 156 /** 157 * append only file AOF持久化 158 * 本質:把用戶執行的每個'寫'指令都備份到文件中,還原數據的時候其實就是執行具體的指令 159 * 默認沒有開啟,開啟的時候會將 Redis 內的數據清空,使用之前先開啟 160 * redis.conf 161 * appendonly no #默認不開啟 162 * appendfilename "appendonly.aof" #備份文件的名稱 163 * dir ./ #備份文件的保存路徑 164 * 開啟 AOF 持久化時,應使用對應的配置文件重啟 Redis 165 * redis-server redis.conf 166 * AOF 持久化的備份頻率 167 * redis.conf 168 * # appendfsync always #每次收到寫指令就會立即備份,最安全,但最慢,開銷大 169 * appendfsync everysec #每秒鐘強制備份一次,在性能和持久化方面做了折中,默認 170 * # appendfsync no #完全依賴操作系統,性能最好,持久化沒有保證,安全性最差 171 * 為 AOF 備份文件做優化壓縮處理 172 * 例如將多個 incr 指令變為一個 set 指令 173 * redis-cli -h 127.0.0.1 -p 6379 bgrewriteaof #優化壓縮 174 **/