redisAPI整理

来源:http://www.cnblogs.com/xuchenliang/archive/2017/05/11/6842831.html
-Advertisement-
Play Games

全局命令 1、查看所有鍵 keys * 2、鍵總數 dbsize 3、檢查鍵是否存在 exists key 4、刪除鍵 del key del key1 key2 key3 5、鍵過期 expire key seconds 大於0的整數表示剩餘過期時間;-1表示已過期;-2表示鍵不存在;ttl ke ...



全局命令
1、查看所有鍵 keys *
2、鍵總數 dbsize
3、檢查鍵是否存在 exists key
4、刪除鍵 del key del key1 key2 key3
5、鍵過期 expire key seconds 大於0的整數表示剩餘過期時間;-1表示已過期;-2表示鍵不存在;ttl key返回鍵剩餘時間

數據結構和內部編碼
1、查詢內部編碼 object encoding key

字元串
命令
常用命令
1、設置值
set key value[ex seconds] [px milliseconds] [nx|xx]
setex key seconds value
setnx key value
2、獲取值 get key
3、批量設置值 mset key value [key value]
4、批量獲取值 mget key [key ...]
5、計數
incr key
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
不常用命令
1、追加值 append key value
2、字元串長度 strlen key 每個中文字占用3個位元組
3、設置並返回原值 getset key value
4、設置指定位置的字元 setrange key offeset value
5、獲取部分字元串 getrange key start end

字元串內部編碼
1、int 8個位元組的長整型
2、embstr 小於等於39個位元組的字元串
3、raw 大於39個位元組的字元串

應用場景
1、緩存功能
2、計數
3、共用session
4、限速

哈希
命令
1、設置值 hset key field value 例:hset user:1 name tom
2、獲取值 hget key field 例:hget user:1 name
3、刪除field hdel key field 例:hdel user:1 name
4、計算field個數 hlen key
5、批量設置或獲取field-value hmget key field [field ...]
hmset key field value [field value ...]
6、判斷field是否存在 hexists key field
7、獲取所有field hkeys key
8、獲取所有key hvals key
9、獲取所有的field-value hgetall key
10、hincrby hincrbyfloat
11、計算value的字元串長度 hstrlen key field

內部編碼
1、ziplist field個數比較少且沒有大的value時
2、hashtable 當有value大於64位元組/field個數超過512

使用場景
1、使用hash類型緩存用戶信息
(1)原生字元串類型:每個屬性一個鍵
(2)序列化字元串類型:將用戶信息序列化後用一個鍵保存
Set user:1 serialize(userInfo)
(3)hash類型:每個用戶屬性使用一對field-value,但是只用一個鍵保存

列表
命令
添加操作
(1)從右邊插入元素
rpush key value [value ...]
Lrange 0 -1從左到右獲取列表所有元素
(2)從左邊插入元素
lpush key value[value ...]
(3)向某個元素前或後插入元素
linsert key before|after pivot value
例:linsert listkey before b java
查找
(1)獲取指定範圍內的元素列表
lrange key start end
(2)獲取列表指定索引下標的元素
lindex key index
(3)獲取列表長度
Llen key
刪除
(1)從列表左側彈出元素
(2)從列表右側彈出元素
(3)刪除指定元素
(4)按照索引範圍修剪列表
修改
修改指定索引下標的元素
lset key index newvalue
阻塞操作
blpop key [key ...] timeout
brpop key[key ...] timeout
timeout:阻塞時間(單位:秒)
(1)列表為空:如果timeout=3,那麼客戶端要等到3秒後返回,如果timeout=0,那麼客戶端一直阻塞等下去。
(2)列表不為空:客戶端立即返回。
註意:在使用brpop時,有兩點需要註意
1.如果是多個鍵,那麼brpop會從左到右遍歷鍵,一旦有一個鍵能彈出元素,客戶端立即返回。
2.如果多個客戶端對同一個鍵執行brpop,那麼最先執行brpop命令的客戶端可以獲取到彈出的值。
內部編碼:
(1)元素個數較少且沒有大元素時,內部編碼為ziplist
(2)元素個數超過512個,內部編碼變為linkedlist
(3)某個元素超過64位元組,內部編碼也會變為linkedlist

使用場景
1、消息隊列
2、文章列表

列表使用口訣:
lpush+lpop=Stack
Lpush+rpop=Queue
Lpush+ltrim=Capped Collection
Lpush+brpop=Message Queue

集合(無序,不重覆)
命令
集合內操作
(1)添加元素
sadd key element [element...]
(2)刪除元素
srem key element [element ...]
(3)計算元素個數
scard key
(4)判斷元素是否在集合中
sismember key element
(5)隨機從集合返回指定個數元素
srandmember key [count]
(6)從集合隨機彈出元素
spop key
(7)獲取所有元素
smember key
集合間操作
(1)求多個集合的交集
sinter key [key...]
(2)求多個集合的並集
sunion key [key...]
(3)求多個集合的差集
sdiff key [key...]
(4)將交集、並集、差集的結果保存
sinterstore destination key [key...]
sunionstore destination key[key...]
sdiffstore destination key[key...]
例:sinterstore user:1_2:inter user:1:follow user:2:follow
內部編碼
(1)當元素個數較少且都為整數時,內部編碼為intset
(2)當元素個數超過512個,內部編碼變為hashtable
(3)當元素個數不為整數時,內部編碼為hashtable
使用場景
1、給用戶添加標簽
2、給標簽添加用戶
3、刪除用戶下的標簽
4、刪除標簽下的用戶
5、計算用戶共同感興趣的標簽


有序集合(不重覆,有排序)
命令
集合內
(1)添加成員
zadd key score member [score member...]
例:zadd user:ranking 251 tom
nx:必須不存在,用於添加
xx:必須存在,用於更新
ch:返回此次操作後,有序集合元素和分數發生變化的個數
incr:對score做增加,相當於後面介紹的zincrby
(2)計算成員個數
zcard key
(3)計算某個成員的分數
zscore key member
(4)計算成員排名
zrank key member(從低到高)
zrevrank key member(從高到低)
(5)刪除成員
zrem key member [member...]
(6)增加成員的分數
zincrby key increment member
例:zincrby user:ranking 9 tom
(7)返回指定排名範圍的成員
zrange key start end [withscore]
zrevrange key start end [withscore]
(8)返回指定分數範圍的成員
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key min max [withscores] [limit offset count]
例:zrangebyscore user:ranking 200 tinf withsore
(9)返回指定分數範圍成員個數
zcount key min max
(10)刪除指定排名內的升序元素
zremrangebyrank key start end
(11)刪除指定分數範圍的成員
zremrangebyscore key min max
集合間操作
(1)交集
zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]
參數說明:
destination:交集計算結果保存到這個鍵
numkeys:需要做交集計算鍵的個數
key [key...]:需要做交集計算的鍵
weights weight [weight...]:每個鍵的權重,在做交集計算時,每個鍵中的每個member會將自己分數乘以這個權重,每個鍵的權重預設是1
aggregate sum|min|max:計算成員交集後,分值可以按照sum、min、max做彙總,預設值是sum
例:
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2 weight 1 0.5 aggregate max
(2)並集
zunionstore destination numkeys ke [key...] [weights weight [weight...]] aggregate sum|min|max
內部編碼
(1)當元素個數較少且每個元素較小時,內部編碼為skiplist
(2)當元素個數超過128個,內部編碼變為ziplist
(3)當某個元素大於64位元組時,內部編碼變為hashtable
使用場景
1、添加用戶贊數
2、取消用戶贊數
3、展示獲取贊數最多的十個用戶
4、展示用戶信息以及用戶分數

鍵管理
單個鍵管理
(1)鍵重命名
rename key newkey
renamenx只有newkey不存在時才被覆蓋
(2)隨機返回一個鍵
randomkey
(3)鍵過期
expire key seconds
expireat key timstamp
ttl/pttl用於查詢鍵剩餘過期時間,pttl精度更高,可以達到毫秒級

毫秒級過期方案:
pexpire key milliseconds:鍵在milliseconds毫秒後過期
pexpire key millseconds-timestamp 鍵在毫秒級時間戳timestamp後過期
註意:
 如果expire key的鍵不存在,返回結果為0
 如果過期時間為負值,鍵會立即被刪除,如del一樣
 persist命令可以將鍵的過期時間清除
 對於字元串類型間,執行set命令會去掉過期時間
 不支持二級數據結構
 setex命令作為set+expire的組合,不但是原子執行,同時減少了一次網路通訊的時間
(4)遷移鍵
 move
move key db
 dump+store
dump key
restore key ttl value
遷移過程如下:
1、在源Redis上執行dump
2、在目標Redis上執行restore
3、migrate(重要,需要深入研究)
遍歷鍵
(1)全量遍歷鍵
keys pattern
(2)漸進式遍歷
scan cursor [match pattern] [count number]
資料庫管理
(1)切換資料庫
select dbIndex
(2)flushdb/flushall


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 各位可以按照順序逐條拍錯。 mysql啟動時報錯:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql-master/data/mysql.pid) 的解決方法: 1、可能是/opt/mysql- ...
  • 當客戶伺服器不允許直接備份時,往往通過導出資料庫腳本的方式來部署-還原資料庫, 但是當資料庫導出腳本很大,用Microsoft SQL Server Management Studio執行腳本時,往往會遇到“記憶體不足”的提示。 解決辦法: 用微軟自帶的sqlcmd工具,可以導入執行。以SQL Ser ...
  • 一、基礎介紹 1、背景描述 目前我們的高可用DB的代理層採用的是360開源的Atlas,從上線以來,已穩定運行2個多月。無論是從性能上,還是穩定性上,相比其他開源組件(amoeba、cobar、MaxScale、MySQL-Proxy等),還是很出色的。 當初我們之所以選擇Atlas,主要看中它有以 ...
  • 交換分區的操作步驟如下:1. 創建分區表t1,假設有2個分區,P1,P2.2. 創建基表t11存放P1規則的數據。3. 創建基表t12 存放P2規則的數據。4. 用基表t11和分區表T1的P1分區交換。 把表t11的數據放到到P1分區5. 用基表t12 和分區表T1p2 分區交換。 把表t12的數據 ...
  • 1.MySQL多實例介紹 1.1.什麼是MySQL多實例 MySQL多實例就是在一臺機器上開啟多個不同的服務埠(如:3306,3307),運行多個MySQL服務進程,通過不同的socket監聽不同的服務埠來提供各自的服務:; 1.2.MySQL多實例的特點有以下幾點 1:有效利用伺服器資源,當單 ...
  • SQL Server 動態行轉列(參數化表名、分組列、行轉列欄位、欄位值) ...
  • 第一步:下載安裝包 我們首先需要下載 mongodb 的安裝包,直接到官網下載即可。地址為:https://www.mongodb.com/download-center#community。 看下自己的操作系統是32位還是64位選擇不同的安裝包下載。 第二步:安裝軟體 下載完成之後安裝。安裝的時候 ...
  • 近期Office365用戶升級後解決了在Power Pivot中輸入中文的問題,但是同時也帶來了一個新的問題就是表屬性視窗預設為“查詢編輯器”模式,且無法切換回“表預覽”模式。 本文和您分享在這種情況下如何對源數據進行更改操作。 【導入時未進行篩選的情況】 從Excel文件導入數據到PowerPiv ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...