【译】StackExchange.Redis中文使用文档--键与值

键,值和通道

在处理redis时,是键不是键之间有很重要的区别。
键是数据库中数据片段(可以是String,List,Hash或任何其他redis数据类型)的独一无二的名称。
键永远不会被解释为...好吧,任何东西:它们只是惰性名称。
此外,当处理集群或分片系统时,它是定义包含此数据的节点(或者如果有从节点的节点)的关键 - 因此键对于路由命令是至关重要的。

这与 形成对比; 值是单独(对于字符串数据)或分组对键的内容存储
值不影响命令路由 <small>(注意:使用 SORT 命令时除非指定 BY 或者 GET,否则是很难解释的)</small>

同样,为了操作的目的,值通常被redis翻译为:

  • incr (和各种类似的命令)将String值转换为数值数据
  • 排序可以使用数字或unicode规则解释值
  • 和许多其他操作

关键是使用API需要理解什么是键,什么是值。
这反映在StackExchange.Redis API中,但是好消息是,大部分时间你根本不需要知道这一点。

当使用 发布/订阅 时,我们处理 channels ; channel 不会影响路由(因此它们不是密钥),但与常规值非常不同,因此要单考虑。

StackExchange.Redis 通过 RedisKey 类型表示键。
好消息是,可以从 stringbyte[] 的隐式转换,允许使用文本和二进制密钥,没有任何复杂性。

例如,StringIncrement 方法使用一个 RedisKey 作为第一个参数,但是你不需要知道 ;

举个例子:

string key = ...
db.StringIncrement(key);

or

byte[] key = ...
db.StringIncrement(key);

同样,有一些操作返回 键为 RedisKey - 再次,它依然可以自动隐式转换:

string someKey = db.KeyRandom();

StackExchange.Redis 用 RedisValue 类型表示值。 与 RedisKey 一样,存在隐式转换,这意味着大多数时候你从来没有看到这种类型,例如:

db.StringSet("mykey", "myvalue");

然而,除了文本和二进制内容,值还可能需要表示类型化的原始数据 - 最常见的(在.NET术语中)Int32Int64DoubleBoolean。 因此,RedisValue提供了比 RedisKey 更多的转换支持:

db.StringSet("mykey", 123); // this is still a RedisKey and RedisValue
...
int i = (int)db.StringGet("mykey");

请注意,虽然从基元类型到 RedisValue 的转换是隐式的,但是从 RedisValue 到基元类型的许多转换是显式的:这是因为如果数据没有合适的值,这些转换很可能会失败。

另外注意,当做数字 处理时,redis将不存在的键视为零; 为了与此一致,将空响应视为零:

db.KeyDelete("abc");
int i = (int)db.StringGet("abc"); // this is ZERO

如果您需要检测空状态,那么你就可以这样检查:

db.KeyDelete("abc");
var value = db.StringGet("abc");
bool isNil = value.IsNull; // this is true

或者更简单地,只是使用提供的 Nullable <T> 支持:

db.KeyDelete("abc");
var value = (int?)db.StringGet("abc"); // behaves as you would expect

哈希

由于哈希中的字段名称不影响命令路由,它们不是键,但可以接受文本和二进制名称, 因此它们被视为用于API目的的值。

通道

发布/订阅 的通道名称由 RedisChannel 类型表示; 这与 RedisKey 大体相同,但是是独立处理的,因为虽然通道名是正当的第一类元素,但它们不影响命令路由。

脚本

redis中的脚本 有两项显著的特性:

  • 输入必须保持键和值分离(在脚本内部分别成为 KEYSARGV
  • 返回格式未预先定义:这将特定于您的脚本

正因为如此,ScriptEvaluate 方法接受两个独立的输入数组:一个用于键的 RedisKey [],一个用于值的 RedisValue [] (两者都是可选的,如果省略则假定为空)。 这可能是你实际需要在代码中键入 RedisKeyRedisValue 的少数几次之一,这只是因为数组变动规则:

    var result = db.ScriptEvaluate(TransferScript,
    new RedisKey[] { from, to }, new RedisValue[] { quantity });

(其中 TransferScript 是一些包含Lua的 string,在这个例子中没有显示)

响应使用 RedisResult 类型(这是脚本专用的;通常API尝试尽可能直接清晰地表示响应)。 和前面一样, RedisResult 提供了一系列转换操作 - 实际上比 RedisValue 更多,因为除了可以转换为文本,二进制,一些基元类型和可空元素,响应可以转换为 数组 ,例如:

string[] items = db.ScriptEvaluate(...);

结论

API中使用的类型是非常故意选择的,以区分redis keysvalues。 然而,在几乎所有情况下,您不需要直接去参考所涉及的底层类型,因为提供了转换操作。

查看原文

More

作者水平有限,若有疏漏或错误还望提醒,十分感谢。

您可以在这里 提出问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容