1. **String類型操作**
2. string是redis最基本的類型,而且string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象
4. $redis\->set('key','TK');
5. $redis\->set('number','1');
6. $redis\->setex('key',5,'TK');//設置有效期為5秒的鍵值
7. $redis\->psetex('key',5000,'TK');//設置有效期為5000毫秒(同5秒)的鍵值
8. $redis\->setnx('key','XK');//若鍵值存在返回false?不存在返回true
9. $redis\->delete('key');刪除鍵值可以傳入數組?array('key1','key2')刪除多個鍵
10. $redis\->getSet('key','XK');//將鍵key的值設置為XK,?并返回這個鍵值原來的值TK
11. ?$ret?\=?$redis\->multi()//批量事務處理,不保證處理數據的原子性
12. \->set('key1','val1')
13. \->get('key1')
14. \->setnx('key','val2')
15. \->get('key2')
16. \->exec();
17. $redis\->watch('key');//?監控鍵key?是否被其他客戶端修改
18. 如果KEY在調用watch()和exec()之間被修改,exec失敗
19. function?f($redis,?$chan,?$msg){//頻道訂閱
20. switch($chan){
21. case'chan-1':
22. ????????????echo?$msg;
23. break;
25. case'chan-2':
26. ????????????echo?$msg;
27. break;
29. case'chan-2':
30. ????????????echo?$msg;
31. break;
32. }
33. }
35. $redis\->subscribe(array('chan-1','chan-2','chan-3'),'f');//?subscribe?to?3?chans
37. $redis\->publish('chan-1','hello,?world!');//?send?message.?
38. $redis\->exists('key');//驗證鍵是否存在,存在返回true
39. $redis\->incr('number');//鍵值加1
40. $redis\->incrby('number',-10);//鍵值加減10
41. $redis\->incrByFloat('number',+/-?1.5);?//鍵值加減小數
42. $redis\->decr('number');//?鍵值減1
43. $redis\->decrBy('number',10);//?鍵值減10
44. $mget?\=?$redis\->mget(array('number','key'));//?批量獲取鍵值,返回一個數組
45. $redis\->mset(array('key0'\=>'value0','key1'\=>'value1'));//?批量設置鍵值
46. $redis\->msetnx(array('key0'\=>'value0','key1'\=>'value1'));
47. //?批量設置鍵值,類似將setnx()方法批量操作
48. $redis\->append('key','-Smudge');//原鍵值TK,將值追加到鍵值后面,鍵值為TK-Smudge
49. $redis\->getRange('key',0,5);//?鍵值截取從0位置開始到5位置結束
50. $redis\->getRange('key',\-6,\-1);//?字符串截取從-6(倒數第6位置)開始到-1(倒數第1位置)結束
51. $redis\->setRange('key',0,'Smudge');
52. //?鍵值中替換字符串,0表示從0位置開始
53. 有多少個字符替換多少位置,其中漢字占2個位置
54. $redis\->strlen('key');//鍵值長度
55. $redis\->getBit('key');
56. $redis\->setBit('key');
57. list鏈表操作
58. $redis\->delete('list-key');//?刪除鏈表
59. $redis\->lPush('list-key','A');//插入鏈表頭部/左側,返回鏈表長度
60. $redis\->rPush('list-key','B');//插入鏈表尾部/右側,返回鏈表長度
61. $redis\->lPushx('list-key','C');
62. //?插入鏈表頭部/左側,鏈表不存在返回0,存在即插入成功,返回當前鏈表長度
63. $redis\->rPushx('list-key','C');
64. //?插入鏈表尾部/右側,鏈表不存在返回0,存在即插入成功,返回當前鏈表長度
65. $redis\->lPop('list-key');//返回LIST頂部(左側)的VALUE?,后入先出(棧)
66. $redis\->rPop('list-key');//返回LIST尾部(右側)的VALUE?,先入先出(隊列)
67. $redis\->blPop();
68. $redis\->brPop();
69. $redis\->lSize('list-key');
70. //?如果是鏈表則返回鏈表長度,空鏈表返回0?
71. 若不是鏈表或者不為空,則返回false,判斷非鏈表"?===?false?"
72. $redis\->lGet('list-key',-1);//?通過索引獲取鏈表元素?0獲取左側一個??-1獲取最后一個
73. $redis\->lSet('list-key',0,'X');//0位置元素替換為?X
74. $redis\->lRange('list-key',0,3);
75. //鏈表截取?從0開始?3位置結束?,結束位置為-1?獲取開始位置之后的全部
76. $redis\->lTrim('list-key',0,1);//?截取鏈表(不可逆)?從0索引開始?1索引結束?
77. $redis\->lRem('list-key','C',2);//鏈表從左開始刪除元素2個C
78. $redis\->lInsert('list-key',Redis::BEFORE,'C','X');
79. //?在C元素前面插入X??,?Redis::AfTER(表示后面插入)?
80. 鏈表不存在則插入失敗返回0若元素不存在返回-1
81. $redis\->rpoplpush('list-key','list-key2');
82. //從源LIST的最后彈出一個元素
83. 并且把這個元素從目標LIST的頂部(左側)壓入目標LIST。
85. $redis\->brpoplpush();
86. //rpoplpush的阻塞版本,這個版本有第三個參數用于設置阻塞時間
87. 即如果源LIST為空,那么可以阻塞監聽timeout的時間,如果有元素了則執行操作。
88. **Set集合類型**
89. set無序集合不允許出現重復的元素服務端可以實現多個集合操作
90. $redis\->sMembers('key');//獲取容器key中所有元素
91. $redis\->sAdd('key','TK');
92. //?(從左側插入,最后插入的元素在0位置),集合中已經存在TK?則返回false?
93. 不存在添加成功返回true
94. $redis\->sRem('key','TK');//?移除容器中的TK
95. $redis\->sMove('key','key1','TK');//將容易key中的元素TK?移動到容器key1??操作成功返回TRUE
96. $redis\->sIsMember('key','TK');//檢查VALUE是否是SET容器中的成員
97. $redis\->sCard('key');//返回SET容器的成員數
98. $redis\->sPop('key');//隨機返回容器中一個元素,并移除該元素
99. $redis\->sRandMember('key');//隨機返回容器中一個元素,不移除該元素
100. $redis\->sInter('key','key1');
101. //?返回兩個集合的交集?沒有交集返回一個空數組,若參數只有一個集合,則返回集合對應的完整的數組
102. $redis\->sInterStore('store','key','key1');//將集合key和集合key1的交集?存入容器store?成功返回1
103. $redis\->sUnion('key','key1');//集合key和集合key1的并集??注意即使多個集合有相同元素?只保留一個
105. $redis\->sUnionStore('store','key','key1');
106. //集合key和集合key1的并集保存在集合store中,??注意即使多個集合有相同元素?只保留一個
107. $redis\->sDiff('key','key1','key2');//返回數組,該數組元素是存在于key集合而不存在于集合key1?key2
108. **Zset數據類型**
109. \*\*(stored?set)和set一樣是字符串的集合,不同的是每個元素都會關聯一個double類型的?score
110. redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。\*\*
112. $redis\->zAdd('tkey',1,'A');
113. //??插入集合tkey中,A元素關聯一個分數,插入成功返回1
114. 同時集合元素不可以重復,如果元素已經存在返回0
115. $redis\->zRange('tkey',0,-1);//?獲取集合元素,從0位置?到?-1?位置
116. $redis\->zRange('tkey',0,-1,true);
117. //?獲取集合元素,從0位置?到?-1?位置,?返回一個關聯數組?帶分數?
118. ??????????????????????array(\[A\]\=>0.01,**\=>0.02,\[D\]\=>0.03)其中小數來自zAdd方法第二個參數**
119. **$redis\->zDelete('tkey','B');//?移除集合tkey中元素B??成功返回1?失敗返回?0**
120. **$redis\->zRevRange('tkey',0,\-1);//?獲取集合元素,從0位置?到?-1?位置,數組按照score降序處理**
122. **$redis\->zRevRange('tkey',0,\-1,true);**
123. **//?獲取集合元素,從0位置?到?-1?位置,數組按照score降序處理?返回score關聯數組**
124. **$redis\->zRangeByScore('tkey',0,0.2,array('withscores'\=>true));**
125. **//獲取幾個tkey中score在區間\[0,0.2\]元素?,score由低到高排序,**
126. **元素具有相同的score,那么會按照字典順序排列,?withscores?控制返回關聯數組**
127. **$redis\->zRangeByScore('tkey',0.1,0.36,?array('withscores'\=>?TRUE,'limit'\=>?array(0,1)));**
128. **//其中limit中?0和1?表示取符合條件集合中?從0位置開始,向后掃描1個?返回關聯數組**
129. **$redis\->zCount('tkey',2,10);//?獲取tkey中score在區間\[2,?10\]元素的個數**
130. **$redis\->zRemRangeByScore('tkey',1,3);//?移除tkey中score在區間\[1,?3\](含邊界)的元素**
131. **$redis\->zRemRangeByRank('tkey',0,1);**
132. **//默認元素score是遞增的,移除tkey中元素?從0開始到-1位置結束**
133. **$redis\->zSize('tkey');//返回存儲在key對應的有序集合中的元素的個數**
134. **$redis\->zScore('tkey','A');//?返回集合tkey中元素A的score值**
135. **$redis\->zRank('tkey','A');**
136. **//?返回集合tkey中元素A的索引值?**
137. **?????????????????????????z集合中元素按照score從低到高進行排列,即最低的score?index索引為0**
138. **$redis\->zIncrBy('tkey',2.5,'A');//?將集合tkey中元素A的score值?加?2.5**
139. **$redis\->zUnion('union',?array('tkey','tkey1'));**
140. **//?將集合tkey和集合tkey1元素合并于集合union?,?并且新集合中元素不能重復**
141. **返回新集合的元素個數,如果元素A在tkey和tkey1都存在,則合并后的元素A的score相加**
142. **$redis\->zUnion('ko2',?array('k1','k2'),?array(5,2));**
143. **//?集合k1和集合k2并集于k02?,array(5,1)中元素的個數與子集合對應,然后?5?對應k1?**
144. **???????????k1每個元素score都要乘以5,同理1對應k2,k2每個元素score乘以1**
145. **然后元素按照遞增排序,默認相同的元素score(SUM)相加**
146. **$redis\->zUnion('ko2',?array('k1','k2'),?array(10,2),'MAX');**
147. **//?各個子集乘以因子之后,元素按照遞增排序,相同的元素的score取最大值(MAX)**
148. **也可以設置MIN?取最小值**
149. **$redis\->zInter('ko1',?array('k1','k2'));**
150. **//?集合k1和集合k2取交集于k01?,且按照score值遞增排序**
151. **如果集合元素相同,則新集合中的元素的score值相加**
152. **$redis\->zInter('ko1',?array('k1','k2'),?array(5,1));**
153. **//集合k1和集合k2取交集于k01?,array(5,1)中元素的個數與子集合對應,然后?5?對應k1?**
154. **??????????k1每個元素score都要乘以5,同理1對應k2,k2每個元素score乘以1**
155. **,然后元素score按照遞增排序,默認相同的元素score(SUM)相加**
156. **$redis\->zInter('ko1',?array('k1','k2'),?array(5,1),'MAX');**
157. **//?各個子集乘以因子之后,元素score按照遞增排序,相同的元素score取最大值(MAX)**
158. **也可以設置MIN?取最小值**
159. **\[b\]Hash數據類型**
160. redis?hash是一個string類型的field和value的映射表.它的添加,刪除操作都是O(1)(平均).hash特別適合用于存儲對象。
162. $redis\->hSet('h','name','TK');//?在h表中?添加name字段?value為TK
163. $redis\->hSetNx('h','name','TK');
164. //?在h表中?添加name字段?value為TK?如果字段name的value存在返回false?否則返回?true
165. $redis\->hGet('h','name');//?獲取h表中name字段value
166. $redis\->hLen('h');//?獲取h表長度即字段的個數
167. $redis\->hDel('h','email');//?刪除h表中email?字段
168. $redis\->hKeys('h');//?獲取h表中所有字段
169. $redis\->hVals('h');//?獲取h表中所有字段value
170. $redis\->hGetAll('h');//?獲取h表中所有字段和value?返回一個關聯數組(字段為鍵值)
171. $redis\->hExists('h','email');//判斷email?字段是否存在與表h?不存在返回false
172. $redis\->hSet('h','age',28);
173. $redis\->hIncrBy('h','age',\-2);
174. //?設置h表中age字段value加(-2)?如果value是個非數值?則返回false?否則,返回操作后的value
175. $redis\->hIncrByFloat('h','age',\-0.33);
176. //?設置h表中age字段value加(-2.6)?如果value是個非數值?則返回false?否則
177. 返回操作后的value(小數點保留15位)
178. $redis\->hMset('h',?array('score'\=>'80','salary'\=>2000));//?表h?批量設置字段和value
179. 全選復制放進筆記
180. $redis\->hMGet('h',?array('score','salary'));//?表h?批量獲取字段的value
```
# 清除當前庫的所有keys
Redis::flushdb();
# 清除所有庫的所有keys
Redis::flushall();
```
[https://blog.csdn.net/h330531987/article/details/79090555](https://blog.csdn.net/h330531987/article/details/79090555)
- 常見功能
- 第三方授權登錄
- 郵件發送
- 簡易聊天室
- 獲取各國匯率
- PHP獲取服務器硬件指標
- 數據上報之
- web開發
- 開發規范
- 前端
- 踩坑
- 將footer固定在底部
- bootstrap
- Metronic
- 用到的jquery插件
- bootstrap-hover-dropdown
- jquery.slimscroll
- jquery.blockui
- bootstrap-switch
- js.cookie
- moment
- bootstrap-daterangepicker
- morris
- raphael
- jquery.waypoints
- jquery.counterup
- select2
- 取值和設置默認值
- vue
- axios
- 瀏覽器
- 谷歌瀏覽器
- 谷歌插件
- layui
- layui-表格
- layui-表單
- layui-彈窗
- layui-分頁
- 后端
- 操作系統
- linux
- 用戶管理
- 文件管理
- 目錄管理
- 壓縮和解壓縮
- 進程查看
- 端口查看
- 開機自啟動服務
- 定時任務
- shell腳本
- 殺掉運行超過指定時長指定服務的進程
- 獲取服務器使用狀態
- bash-shell連接socket
- 自定義快捷命令
- centos-踩坑
- 防火墻
- 軟件
- yum
- vim
- screen
- window
- 語言
- PHP
- 配置優化
- 框架
- thinkphp5.1+
- think命令行
- laravel6.+
- 維護模式
- 根據環境讀取不同配置
- laravel6.+采坑
- laravel坑位
- 數據庫事務
- 任務調度
- 文件權限問題
- 增強框架
- larvel:elastic-search
- 圖形驗證碼
- laravel獲取ip
- 函數
- strtotime
- 正則匹配
- 類
- 接口類與抽象類
- 類相關的關鍵字 - abstract
- 類相關的關鍵字 - interface
- PHP有關類的調用方式"->"與"::"的區別
- 擴展
- 問題歸納
- json_encode和json_decode
- 字符串的運算
- curl
- 優化php效率
- 數組相加合并與array_merge
- 時區轉換
- 不常用特性
- php反射
- 包管理器-composer
- GuzzleHttp
- Python
- Go
- 數據庫
- Redis
- 安裝
- 本地化-數據備份
- php-redis操作
- Mysql
- mysql-命令集合
- 設置終端可訪問
- 數據庫設計
- 用戶基礎信息表
- 踩坑集合
- mysql-2002
- mysql-2054
- 優化策略
- mysql-密碼驗證插件
- 一些牛逼的sql查詢
- topN
- 無限級分類
- Memcache
- MongoDb
- 安裝mongo-server
- 安裝php-mongodb擴展
- 在laravel中使用mongoDB
- 客戶端軟件
- Hbase
- Elasticsearch
- elastic-search
- restfulApi操作es
- web服務器
- 1.nginx
- 配置語法規則
- 配置詳解
- rewrite規則
- request_filename
- 2.apache
- 功能設計
- 加密解密
- Base64
- 對亞馬遜SKU加密
- 兼職項目中的加解密
- 騰訊外包時的加密
- 接口設計
- 接口限流設計
- 分庫分表
- 遍歷展示文件目錄結構
- 時區換算
- 文件切割
- 解析xml字符串
- 項目
- 博客后臺管理
- 亞馬遜廣告API
- 官方指引文檔
- 開發人員中心
- 應用商店
- 第三方庫
- 申請API郵件記錄
- 亞馬遜MWS
- 付款報告
- 亂碼
- 亞馬遜管理庫存報告
- 報告
- 商品
- 入庫
- 履行
- 出庫
- 財務
- 訂單
- 異步任務處理
- 集群如何同步代碼
- 基本開發流程
- 文檔管理
- showdoc
- 運行環境
- 開發環境
- vagrant
- windows上配置安裝
- vagrant安裝插件緩慢
- 更換ssh默認端口映射
- 設置x-shell密碼登錄
- 使用市場的box-homestead
- homestead-7: Box 'lc/homestead'
- 常見問題
- 虛擬環境reboot
- 突然無法使用
- phpStudy
- wamp
- 壓測性能
- VPN
- vultr
- 凌空圖床
- 寶塔
- 自動化部署
- 版本管理軟件鉤子
- 線上環境-LNMP
- centos7
- nginx
- mysql
- mysql開機自啟
- mysql-更換默認端口
- datetime字段類型默認值
- php
- php擴展安裝
- redis
- swoole
- gd
- BCMath
- igbinary
- zstd
- 包管理器:composer
- 優化性能
- nodejs
- 更新gcc版本
- 版本控制
- git
- 常用命令
- gitlab
- 版本管理規范
- 使用阿里云創建遠程倉庫
- git自動化部署
- svn
- 忽略指定文件
- 拉取代碼
- 自動化運維
- jekins
- 容器
- 集群
- 架構設計
- 設計原則
- 閱讀參考
- 代碼規劃
- 架構實戰
- 服務治理
- 權限控制設計
- 具體設計
- 計劃
- 疑問知識點
- 讀書筆記
- 高性能Mysql
- TCP-IP詳解-卷一:協議
- 思考
- php如何實現并發執行
- 對接調用設計
- 如何在瀏覽器上實現插件
- 如何設計一個app結合業務告警
- mysql的where查詢沒有用到索引
- 為啥in查詢比循環嵌套sql的查詢還要慢
- 使用git來創建屬于自己的composer包
- 翻頁獲取數據的時候又新增了數據
- 安全思路
- 月報
- PHP ?? 和 ?: 的區別
- PHP異步執行
- redis集群的目標是什么
- 大文件數據處理
- 性能瓶頸分析
- 命令行里輸出帶顏色的字體
- 面試問題合集
- 基礎
- 安全
- 算法
- 冒泡排序
- 快速排序
- 二分法查詢數組指定成員
- 字符查找匹配
- 令牌桶
- 漏桶
- 計數器
- 代理
- 協議
- http
- 狀態碼
- tcp
- udp
- Oauth2.0
- 設計模式
- 單例模式
- 適配器模式
- 工廠模式
- 觀察者模式
- 流程化
- 地址欄輸入網址到返回網頁的流程
- 題目收集
- 工具
- rabbitMq
- rabbitMQ用戶管理
- 生產者
- 消費者
- 支持TP5.*的think-queue
- 消息丟失
- 消費者報錯
- rabbitMQ配置優化
- 磁盤滿載導致服務掛掉
- PHP類庫
- rabbitMQ踩坑
- navicat
- vscode
- phpstorm
- 激活碼
- markdown
- PHP自定義類庫
- 工具類
- 領導力
- 任務分配
- 代碼組織
- 不要重復
- 避免污染
- 接口定義規范
- 小業務需求
- 獲取充值面額組成
- 監控服務器CPU和內存
- shell腳本版本