我正在测试servicestack.redis库,一开始,我不明白为什么我不能确定我是在做pop left还是pop right。一开始,我只看到
redis.BlockingPopItemFromList("list1", null);
但我想知道,在哪里可以选择向左或向右弹出?然后我发现:
redis.BlockingRemoveStartFromList("list1", null);
还有
redis.BlockingDequeueItemFromList("list1", null);
似乎: BlockingPopItemFromList
首先获取并删除最旧的,弹出右键 BlockingRemoveStartFromList
首先获取并删除最新的,然后向左弹出 BlockingDequeueItemFromList
首先获取并移除最旧的,然后再次弹出
所以,三个不同的方法,有三个不同的名字,其中两个做同样的事情。
此外,还有以下方法: RemoveStartFromList
BlockingRemoveStartFromList RemoveEndFromList
但是没有 BlockingRemoveEndFromList
. 我想是的 BlockingPopx...
为什么不称之为popleft和popright,或者,一个带有参数的pop方法,说明从何处弹出?
1条答案
按热度按时间dphi5xsq1#
对于不熟悉redis keycode命令的开发人员来说,这些api被赋予了描述性的含义,以提高普通代码库的可读性。
但是,如果您想知道每个api执行的操作,只需搜索github.com/servicestack/servicestack.redis源代码,查看它们调用了什么redis命令。或者,如果您只是对列表API感兴趣,那么很多API都是在redisclient\u list.cs中定义的。
你很少会想用
Blocking*
调用redis blocking命令的api,除非这是您想要阻止线程的特定行为,直到元素被添加到列表中。其他API是正常操作,具体取决于您希望如何处理列表数据结构。在我看来,api名称对它们的行为非常具有描述性,例如,如果您想将其视为一个列表,则有:
向列表中添加项目
PrependItemToList
-在列表的开头加上前缀(lpush)AddItemToList
-将项目添加到列表末尾(rpush)添加项目范围
PrependRangeToList
-将元素范围前置到列表开头(lpush[])AddRangeToList
-在列表末尾添加一系列元素(rpush[])从列表中删除项目
RemoveStartFromList
-从列表开头删除项目(lpop)RemoveEndFromList
-从列表末尾删除项目(rpop)如果您希望在代码库中使用不同的术语,则上述命令也有别名,例如如果您希望将列表视为不同的数据结构(如队列或堆栈),则应使用成对的API来处理它们,即:
EnqueueItemOnList
-将项目排入队列(lpush)DequeueItemFromList
-将项目从队列中出列(rpop)或者,如果要将列表视为一个堆栈:
PushItemToList
-推送项目(rpush)PopItemFromList
-弹出项目(rpop)如果您想使用自己的术语,只需将自己的扩展方法添加到redis客户端接口,例如:
您现在可以在代码库中使用自己的命名API:
当需要时,您可以将redis客户机强制转换为iredisnativeclient,并获得与redis服务器上相同的命令名,但需要转换原始命令名
byte[]
utf-8型string
在适当的情况下。