日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

BeetleX.Redis基础操作和对象格式

發(fā)布時間:2023/12/4 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BeetleX.Redis基础操作和对象格式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Decr

為鍵 key 儲存的數(shù)字值減去一。

如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執(zhí)行 DECR 操作。

如果鍵 key 儲存的值不能被解釋為數(shù)字, 那么 DECR 命令將返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數(shù)字表示之內。

var set = await DB.Set("mykey", "10"); var decr = await DB.Decr("mykey");

Decrby

將鍵 key 儲存的整數(shù)值減去減量 decrement 。

如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執(zhí)行 DECRBY 命令。

如果鍵 key 儲存的值不能被解釋為數(shù)字, 那么 DECRBY 命令將返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數(shù)字表示之內。

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 命令接受的時間參數(shù)是 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 服務器的數(shù)據(刪除所有數(shù)據庫的所有 key )。

此命令從不失敗。

await DB.Flushall();

Get

返回與鍵 key 相關聯(lián)的字符或對象(當不指定序列化格式的情況都要用)

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 在內)。

負數(shù)偏移量表示從字符串的末尾開始計數(shù), -1 表示最后一個字符, -2 表示倒數(shù)第二個字符, 以此類推。

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 儲存的數(shù)字值加上一。

如果鍵 key 不存在, 那么它的值會先被初始化為 0 , 然后再執(zhí)行 INCR 命令。

如果鍵 key 儲存的值不能被解釋為數(shù)字, 那么 INCR 命令將返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數(shù)字表示之內。

var set = await DB.Set("mykey", 10000000); var incr = await DB.Incr("mykey"); var get = await DB.Get<string>("mykey");

Incrby

為鍵 key 儲存的數(shù)字值加上增量 increment 。

如果鍵 key 不存在, 那么鍵 key 的值會先被初始化為 0 , 然后再執(zhí)行 INCRBY 命令。

如果鍵 key 儲存的值不能被解釋為數(shù)字, 那么 INCRBY 命令將返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數(shù)字表示之內。

關于遞增(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 儲存的值加上浮點數(shù)增量 increment 。

如果鍵 key 不存在, 那么 INCRBYFLOAT 會先將鍵 key 的值設為 0 , 然后再執(zhí)行加法操作。

如果命令執(zhí)行成功, 那么鍵 key 的值會被更新為執(zhí)行加法計算之后的新值, 并且新值會以字符串的形式返回給調用者。

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 * 匹配數(shù)據庫中所有 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)操作, 所有給定鍵都會在同一時間內被設置, 不會出現(xiàn)某些鍵被設置了但是另一些鍵沒有被設置的情況。

var result = await DB.MSet(("key1", "hello"), ("key2", "world")); var get = await DB.Get<string>("key1"); get = await DB.Get<string>("key2");

MSetNX

當且僅當所有給定鍵都不存在時, 為所有給定鍵設置值。

即使只有一個給定鍵已經存在, MSETNX 命令也會拒絕執(zhí)行對所有鍵的設置操作。

MSETNX 是一個原子性(atomic)操作, 所有給定鍵要么就全部都被設置, 要么就全部都不設置, 不可能出現(xiàn)第三種狀態(tài)。

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

將當前數(shù)據庫的 key 移動到給定的數(shù)據庫 db 當中。

如果當前數(shù)據庫(源數(shù)據庫)和給定數(shù)據庫(目標數(shù)據庫)有相同名字的給定 key ,或者 key 不存在于當前數(shù)據庫,那么 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 服務器發(fā)送一個 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 發(fā)送到指定的頻道 channel

await DB.Publish("channel", DateTime.Now)

Randomkey

從當前數(shù)據庫中隨機返回一個鍵值

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 關聯(lián)到 key 。

如果 key 已經持有其他值, SET 就覆寫舊值, 無視類型。

當 SET 命令對一個帶有生存時間(TTL)的鍵進行設置之后, 該鍵原有的 TTL 將被清除。

var result = await DB.Set("test", "henryfan1"); var value = await DB.Get<string>("test");

SetBit

對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。

位的設置或清除取決于 value 參數(shù),可以是 0 也可以是 1 。

當 key 不存在時,自動生成一個新的字符串值。

字符串會進行伸展(grown)以確保它可以將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。

offset 參數(shù)必須大于或等于 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 參數(shù)覆寫(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");

對象序列化配置

組件默認提供三種數(shù)據對象的支持,分別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基础操作和对象格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美色图国产精品 | 草青青视频| 高清av一区| 乱熟女高潮一区二区在线 | 欧美丰满少妇 | 久久噜噜色综合一区二区 | 国语粗话呻吟对白对白 | 在线观看91av | 黄色一级片毛片 | xx视频在线 | 亚洲欧洲色图 | 女同毛片一区二区三区 | 欧美专区第二页 | 中文字幕一区二区三区人妻电影 | 成都4电影免费高清 | 国产精品探花一区二区在线观看 | 麻豆精品国产传媒av绿帽社 | 国模私拍一区二区三区 | 91精品久久久久久久久久入口 | 含羞草一区二区 | 麻豆porn | 91av在线免费视频 | 欧美大片aaa| 日本天堂网在线 | 樱花av在线 | 成年女人免费视频 | 欧美色女人 | 成人91在线| 欧美久久久久久久 | 美女18毛片 | 五月婷综合网 | 国产精品久久77777 | 免费福利av | av在线影片| 亚洲第一视频 | 精品福利电影 | 国产美女久久久 | 精品无码一区二区三区的天堂 | 成人av网站免费 | 国产在线色视频 | 91蝌蚪九色| 亚洲精品久久久久国产 | 日av一区 | 激情a | 成人1区2区 | 素人女裸体 | 免费看国产黄色 | 久国产精品 | 超碰超碰97 | 黄色成人av网站 | 欧美在线 | 一区二区三区日韩电影 | 国产真人毛片 | 成人一级影视 | 五月婷婷一区二区三区 | 好妞色妞国产在线视频 | 一区二区免费播放 | 国产专区在线播放 | 风韵丰满熟妇啪啪区老熟熟女 | 国产中文字幕在线视频 | 午夜在线视频免费观看 | 青在线视频 | 美痴女~美人上司北岛玲 | 一卡二卡在线 | 中国在线观看视频高清免费 | 中文av字幕 | 国产精品一区二区三区久久久 | 精品人妻中文无码av在线 | 新97超碰| 真实乱视频国产免费观看 | 污网在线观看 | av无码精品一区二区三区 | 一区二区播放 | 亚洲成网站 | 夜噜噜 | 欧美日韩观看 | 亚洲精品小视频在线观看 | 欧美肉大捧一进一出免费视频 | 日本啪啪啪一区二区 | 艳妇乳肉豪妇荡乳xxx | 黄色aa毛片 | 操校花视频| 国产丝袜美女 | 亚洲色综合 | 前任攻略在线观看免费完整版 | 舌奴调教日记 | 美女日批在线观看 | 性v天堂| 男人午夜免费视频 | 狠狠爱天天干 | 大香蕉毛片 | 中文字幕高清在线播放 | 激情九九 | 亚洲精品www久久久久久 | jizz国产在线| 性激情视频 | 欧美肥妇bwbwbwbxx | 国产日韩欧美久久 | www黄色大片 |