BeetleX.Redis基础操作和对象格式
Decr
為鍵 key 儲存的數字值減去一。
如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執行 DECR 操作。
如果鍵 key 儲存的值不能被解釋為數字, 那么 DECR 命令將返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
var set = await DB.Set("mykey", "10"); var decr = await DB.Decr("mykey");Decrby
將鍵 key 儲存的整數值減去減量 decrement 。
如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執行 DECRBY 命令。
如果鍵 key 儲存的值不能被解釋為數字, 那么 DECRBY 命令將返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
var set = await DB.Set("mykey", "10"); var decrby = await DB.Decrby("mykey", 5);Del
刪除給定的一個或多個 key 。
不存在的 key 會被忽略。
var add = await DB.Set("test", "henryfan"); var del = await DB.Del("test");Dump
序列化給定 key ,并返回被序列化的值,使用 RESTORE 命令可以將這個值反序列化為 Redis 鍵。
序列化生成的值有以下幾個特點:
它帶有 64 位的校驗和,用于檢測錯誤, RESTORE 在進行反序列化之前會先檢查校驗和。
值的編碼格式和 RDB 文件保持一致。
RDB 版本會被編碼在序列化值當中,如果因為 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 會拒絕對這個值進行反序列化操作。
序列化的值不包括任何生存時間信息。
var add = await DB.Set("test", "henryfan"); var result = await DB.Dump("test");Exists
檢查給定 key 是否存在。
var add = await DB.Set("aa", "sfsdfsd"); var count = await DB.Exists("aa"); count = await DB.Exists("sdfsdf", "aa"); count = await DB.Exists("sdfsdf", "sdfsdfdsaa");Expire
為給定 key 設置生存時間,當 key 過期時(生存時間為 0 ),它會被自動刪除。
在 Redis 中,帶有生存時間的 key 被稱為『易失的』(volatile)。
生存時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味著,如果一個命令只是修改(alter)一個帶生存時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話,那么生存時間不會被改變。
var add = await DB.Set("mykey", "hello"); var expire = await DB.Expire("mykey", 10); var ttl = await DB.Ttl("mykey"); add = await DB.Set("mykey", "hello world"); ttl = await DB.Ttl("mykey");Expireat
EXPIREAT 的作用和 EXPIRE 類似,都用于為 key 設置生存時間。
不同在于 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。
var set = await DB.Set("mykey", "hello"); var extist = await DB.Exists("mykey"); var expireat = await DB.Expireat("mykey", 1293840000); extist = await DB.Exists("mykey");Flushall
清空整個 Redis 服務器的數據(刪除所有數據庫的所有 key )。
此命令從不失敗。
await DB.Flushall();Get
返回與鍵 key 相關聯的字符或對象(當不指定序列化格式的情況都要用)
var get = await DB.Get<string>("nonexisting"); var set = await DB.Set("mykey", "hello"); get = await DB.Get<string>("mykey");GetBit
對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。
當 offset 比字符串值的長度大,或者 key 不存在時,返回 0
var set = await DB.SetBit("mykey", 7, true); var get = await DB.GetBit("mykey", 0); get = await DB.GetBit("mykey", 7); get = await DB.GetBit("mykey", 100);GetRange
返回鍵 key 儲存的字符串值的指定部分, 字符串的截取范圍由 start 和 end 兩個偏移量決定 (包括 start 和 end 在內)。
負數偏移量表示從字符串的末尾開始計數, -1 表示最后一個字符, -2 表示倒數第二個字符, 以此類推。
var set = await DB.Set("mykey", "This is a string"); var region = await DB.GetRange("mykey", 0, 3); region = await DB.GetRange("mykey", -3, -1); region = await DB.GetRange("mykey", 0, -1); region = await DB.GetRange("mykey", 10, 100);GetSet
將鍵 key 的值設為 value , 并返回鍵 key 在被設置之前的舊值。
var set = await DB.GetSet<string>("aaa", "aaa"); set = await DB.GetSet<string>("aaa", "bbb"); var incr = await DB.Incr("mycounter"); var getset = await DB.GetSet<string>("mycounter", 0); var get = await DB.Get<string>("mycounter");Incr
為鍵 key 儲存的數字值加上一。
如果鍵 key 不存在, 那么它的值會先被初始化為 0 , 然后再執行 INCR 命令。
如果鍵 key 儲存的值不能被解釋為數字, 那么 INCR 命令將返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
var set = await DB.Set("mykey", 10000000); var incr = await DB.Incr("mykey"); var get = await DB.Get<string>("mykey");Incrby
為鍵 key 儲存的數字值加上增量 increment 。
如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執行 INCRBY 命令。
如果鍵 key 儲存的值不能被解釋為數字, 那么 INCRBY 命令將返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
關于遞增(increment) / 遞減(decrement)操作的更多信息, 請參見 INCR 命令的文檔。
var set = await DB.Set("mykey", 10000000); var incr = await DB.Incrby("mykey", 10); var get = await DB.Get<string>("mykey");IncrbyFloat
為鍵 key 儲存的值加上浮點數增量 increment 。
如果鍵 key 不存在, 那么 INCRBYFLOAT 會先將鍵 key 的值設為 0 , 然后再執行加法操作。
如果命令執行成功, 那么鍵 key 的值會被更新為執行加法計算之后的新值, 并且新值會以字符串的形式返回給調用者。
var set = await DB.Set("mykey", "10.5"); var incr = await DB.IncrbyFloat("mykey", 0.1f); set = await DB.Set("mykey", "5.0e3"); incr = await DB.IncrbyFloat("mykey", 200f);Keys
查找所有符合給定模式 pattern 的 key , 比如說:
KEYS * 匹配數據庫中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
var mset = await DB.MSet(("one", 1), ("tow", 2), ("three", 2), ("four", 4)); var keys = await DB.Keys("*o*"); keys = await DB.Keys("t??"); keys = await DB.Keys("*");MGet
返回給定的一個或多個字符串鍵的值。
如果給定的字符串鍵里面, 有某個鍵不存在, 那么這個鍵的值將以特殊值 nil 表示。
await DB.Flushall(); var mset = await DB.MSet(("key1", "value1"),("key2", "value2"),("key3", "value3")); Write(mset); var mget = await DB.MGet<string, string, string>("key1", "key2", "key3");MSet
同時為多個鍵設置值。
如果某個給定鍵已經存在, 那么 MSET 將使用新值去覆蓋舊值, 如果這不是你所希望的效果, 請考慮使用 MSETNX 命令, 這個命令只會在所有給定鍵都不存在的情況下進行設置。
MSET 是一個原子性(atomic)操作, 所有給定鍵都會在同一時間內被設置, 不會出現某些鍵被設置了但是另一些鍵沒有被設置的情況。
var result = await DB.MSet(("key1", "hello"), ("key2", "world")); var get = await DB.Get<string>("key1"); get = await DB.Get<string>("key2");MSetNX
當且僅當所有給定鍵都不存在時, 為所有給定鍵設置值。
即使只有一個給定鍵已經存在, MSETNX 命令也會拒絕執行對所有鍵的設置操作。
MSETNX 是一個原子性(atomic)操作, 所有給定鍵要么就全部都被設置, 要么就全部都不設置, 不可能出現第三種狀態。
var msetnx = await DB.MSetNX(("key1", "hello"), ("key2", "there")); msetnx = await DB.MSetNX(("key3", "world"), ("key2", "there")); var mget = await DB.MGet<string, string, string>("key1", "key2", "key3");Move
將當前數據庫的 key 移動到給定的數據庫 db 當中。
如果當前數據庫(源數據庫)和給定數據庫(目標數據庫)有相同名字的給定 key ,或者 key 不存在于當前數據庫,那么 MOVE 沒有任何效果。
因此,也可以利用這一特性,將 MOVE 當作鎖(locking)原語(primitive)。
var move = await DB.Move("one", 9);PSetEX
這個命令和 SETEX 命令相似, 但它以毫秒為單位設置 key 的生存時間, 而不是像 SETEX 命令那樣以秒為單位進行設置。
var psetex = await DB.PSetEX("mykey", 1000, "hello"); var pttl = await DB.PTtl("mykey"); var get = await DB.Get<string>("mykey");Persist
移除給定 key 的生存時間,將這個 key 從“易失的”(帶生存時間 key )轉換成“持久的”(一個不帶生存時間、永不過期的 key )。
var set = await DB.Set("mykey", "hello"); var expire = await DB.Expire("mykey", 10); var ttl = await DB.Ttl("mykey"); var persist = await DB.Persist("mykey"); ttl = await DB.Ttl("mykey");Pexpire
這個命令和 EXPIRE 命令的作用類似,但是它以毫秒為單位設置 key 的生存時間,而不像 EXPIRE 命令那樣,以秒為單位。
var set = await DB.Set("mykey", "hello"); var pexpire = await DB.Pexpire("mykey", 1500); var ttl = await DB.Ttl("mykey"); ttl = await DB.PTtl("mykey");Pexpireat
這個命令和 expireat 命令類似,但它以毫秒為單位設置 key 的過期 unix 時間戳,而不是像 expireat 那樣,以秒為單位。
var set = await DB.Set("mykey", "hello"); var pexpireat = await DB.Pexpireat("mykey", 1555555555005); var ttl = await DB.Ttl("mykey"); var pttl = await DB.PTtl("mykey");Ping
使用客戶端向 Redis 服務器發送一個 PING
var result = await DB.Ping();Pttl
這個命令類似于 TTL 命令,但它以毫秒為單位返回 key 的剩余生存時間,而不是像 TTL 命令那樣,以秒為單位。
var set = await DB.Set("mykey", "hello"); var expire = await DB.Expire("mykey", 1); var pttl = await DB.PTtl("mykey");Publish
將信息 message 發送到指定的頻道 channel
await DB.Publish("channel", DateTime.Now)Randomkey
從當前數據庫中隨機返回一個鍵值
await DB.Randomkey();Rename
將 key 改名為 newkey 。
當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。
var set = await DB.Set("mykey", "hello"); var ren = await DB.Rename("mykey", "myotherkey"); var get = await DB.Get<string>("myotherkey");Renamenx
當且僅當 newkey 不存在時,將 key 改名為 newkey
var set = await DB.Set("mykey", "hello"); set = await DB.Set("myotherkey", "World"); var ren = await DB.Renamenx("mykey", "myotherkey"); var get = await DB.Get<string>("myotherkey");Set
將字符串值 value 關聯到 key 。
如果 key 已經持有其他值, SET 就覆寫舊值, 無視類型。
當 SET 命令對一個帶有生存時間(TTL)的鍵進行設置之后, 該鍵原有的 TTL 將被清除。
var result = await DB.Set("test", "henryfan1"); var value = await DB.Get<string>("test");SetBit
對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
位的設置或清除取決于 value 參數,可以是 0 也可以是 1 。
當 key 不存在時,自動生成一個新的字符串值。
字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。
offset 參數必須大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之內)。
var setbit = await DB.SetBit("mykey", 7, true); var get = await DB.Get<string>("mykey"); setbit = await DB.SetBit("mykey", 7, false); get = await DB.Get<string>("mykey");SetEX
將鍵 key 的值設置為 value , 并將鍵 key 的生存時間設置為 seconds 秒鐘。
如果鍵 key 已經存在, 那么 SETEX 命令將覆蓋已有的值。
var setex = await DB.SetEX("mykey", 10, "hello"); var ttl = await DB.Ttl("mykey"); var get = await DB.Get<string>("mykey");SetNX
只在鍵 key 不存在的情況下, 將鍵 key 的值設置為 value 。
若鍵 key 已經存在, 則 SETNX 命令不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
var setnx = await DB.SetNX("mykey", "hello"); setnx = await DB.SetNX("mykey", "World"); var get = await DB.Get<string>("mykey");SetRange
從偏移量 offset 開始, 用 value 參數覆寫(overwrite)鍵 key 儲存的字符串值。
不存在的鍵 key 當作空白字符串處理。
var set = await DB.Set("key1", "hello world"); var setrange = await DB.SetRange("key1", 6, "redis"); var get = await DB.Get<string>("key1"); setrange = await DB.SetRange("key2", 6, "redis"); get = await DB.Get<string>("key2");Strlen
返回鍵 key 儲存的字符串值的長度。
var set = await DB.Set("key1", "hello world"); var strlen = await DB.Strlen("key1"); strlen = await DB.Strlen("nonexisting");Type
返回 key 所儲存的值的類型。
var set = await DB.Set("key1", "hello"); set = await DB.Set("key2", "word"); var type = await DB.Type("key1"); type = await DB.Type("key2");對象序列化配置
組件默認提供三種數據對象的支持,分別json,protobuf和messagepack
json
Redis.Default.DataFormater = new JsonFormater(); //or DB = new RedisDB(0, new JsonFormater());protobuf
Redis.Default.DataFormater = new ProtobufFormater(); //or DB = new RedisDB(0, new ProtobufFormater());messagepack
Redis.Default.DataFormater = new MessagePackFormater(); //or DB = new RedisDB(0, new MessagePackFormater());所有基礎操作不變,只是內容會根據配置的序列化類型進行對象序列化處理。
Get
Write(await DB.Get<Employee>("nonexisting")); Write(await DB.Set("emp3", GetEmployee(3))); Write(await DB.Get<Employee>("emp3"));GetSet
Write(await DB.GetSet<Employee>("emp1", GetEmployee(1))); Write(await DB.Set("emp1", GetEmployee(2))); Write(await DB.Get<Employee>("emp1")); Write(await DB.GetSet<Employee>("emp1", GetEmployee(1))); Write(await DB.Get<Employee>("emp1"));MGet
Write(await DB.Set("emp1", GetEmployee(1))); Write(await DB.Set("emp2", GetEmployee(2))); Write(await DB.MGet<Employee, Employee>("emp2", "emp1"));MSet
await DB.Flushall(); Write(await DB.MSet( ("emp1", GetEmployee(1)), ("emp2", GetEmployee(2)) )); Write(await DB.Get<Employee>("emp1")); Write(await DB.Get<Employee>("emp2"));MSetNX
Write(await DB.MSetNX(("key1", GetEmployee(1)), ("key2", GetEmployee(2)))); Write(await DB.MSetNX(("key2", GetEmployee(2)), ("key3", GetEmployee(3)))); var items = await DB.MGet<Employee, Employee, Employee>("key1", "key2", "key3"); Write(items.Item1); Write(items.Item2); Write(items.Item3);PSetEX
Write(await DB.PSetEX("key1", 1000, GetEmployee(1))); Write(await DB.PTtl("key1")); Write(await DB.Get<Employee>("key1"));Publish
for (int i = 0; i < 5; i++) {Write(await DB.Publish("test1", GetEmployee(i))); }Set
Write(await DB.Set("key1", GetEmployee(4))); Write(await DB.Get<Employee>("key1"));SetEX
Write(await DB.SetEX("key1", 10, GetEmployee(1))); Write(await DB.Ttl("key1")); Write(await DB.Get<Employee>("key1"));SetNX
Write(await DB.SetNX("key1", GetEmployee(1))); Write(await DB.SetNX("key1", GetEmployee(2))); Write(await DB.Get<Employee>("key1"));總結
以上是生活随笔為你收集整理的BeetleX.Redis基础操作和对象格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (2)MongoDB副本集自动故障转移原
- 下一篇: 为容器提供持久存储,这个方法试试看