servicestack.redis:popright/popleft丢失,取而代之的是命名怪异的方法?

n7taea2i  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(412)

我正在测试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方法,说明从何处弹出?

dphi5xsq

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客户端接口,例如:

public static class MyRedisApis
{
    public static string PopLeft(this IRedisClient client, string listId) =>
        client.RemoveStartFromList(listId);

    public static string PopRight(this IRedisClient client, string listId) =>
        client.RemoveEndFromList(listId);
}

您现在可以在代码库中使用自己的命名API:

var item = redis.PopLeft(myList);

当需要时,您可以将redis客户机强制转换为iredisnativeclient,并获得与redis服务器上相同的命令名,但需要转换原始命令名 byte[] utf-8型 string 在适当的情况下。

相关问题