ServiceStack.Redis:缺少 PopRight / PopLeft,而是奇怪命名的方法?
ServiceStack.Redis: PopRight / PopLeft missing, instead weirdly named methods?
我正在测试 ServiceStack.Redis 库,起初不明白为什么我无法确定我是向左弹出还是向右弹出。一开始只看到
redis.BlockingPopItemFromList("list1", null);
但想知道,向左或向右弹出的选择在哪里?然后我发现:
redis.BlockingRemoveStartFromList("list1", null);
还有
redis.BlockingDequeueItemFromList("list1", null);
好像是:
BlockingPopItemFromList
首先获取并删除最早的,向右弹出
BlockingRemoveStartFromList
首先获取并删除最新的,向左弹出
BlockingDequeueItemFromList
先取出最老的,再向右弹出
所以,三个不同的方法,三个不同的名称,其中两个做同样的事情。
此外,还有这些方法:
RemoveStartFromList
BlockingRemoveStartFromList
RemoveEndFromList
但是没有BlockingRemoveEndFromList
。我猜是 BlockingPopx...
为什么不将其称为 PopLeft 和 PopRight,或者一种方法 Pop,其参数说明从何处弹出?
API 具有描述性含义,以提高不熟悉 redis keycode commands.
的开发人员在正常代码库中的可读性
但是如果你想知道每个 API 所做的操作,只需搜索 github.com/ServiceStack/ServiceStack.Redis source code to see what Redis command they call. Or if you're just interested in the List APIs a lot of them are defined in RedisClient_List.cs.
你很少会想要使用调用 redis blocking commands 的 Blocking*
API 除非那是你想要阻塞线程的特定行为,直到一个元素已添加到列表中。
其他的API都是正常的操作,看你想怎么对待列表数据结构了。 IMO API 名称对它们的行为非常具有描述性,例如如果你想把它当作一个列表,那就是:
将项目添加到列表
PrependItemToList
- 添加到列表开头 (LPUSH)
AddItemToList
- 将项目添加到列表末尾 (RPUSH)
添加项目范围
PrependRangeToList
- 将元素范围添加到列表的开头 (LPUSH[])
AddRangeToList
- 将一系列元素添加到列表末尾 (RPUSH[])
从列表中删除项目
RemoveStartFromList
- 从列表开头删除一个项目 (LPOP)
RemoveEndFromList
- 从列表末尾删除一个项目 (RPOP)
如果您喜欢在代码库中使用不同的命名法,则上述命令也有别名,例如如果您想将列表视为不同的数据结构,例如队列或堆栈,您会改用成对的 APIs 用于处理它们,即:
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-server 上相同的命令名称,但需要将原始 byte[]
类型转换为 UTF- 8 string
在适当的地方。
我正在测试 ServiceStack.Redis 库,起初不明白为什么我无法确定我是向左弹出还是向右弹出。一开始只看到
redis.BlockingPopItemFromList("list1", null);
但想知道,向左或向右弹出的选择在哪里?然后我发现:
redis.BlockingRemoveStartFromList("list1", null);
还有
redis.BlockingDequeueItemFromList("list1", null);
好像是:
BlockingPopItemFromList
首先获取并删除最早的,向右弹出BlockingRemoveStartFromList
首先获取并删除最新的,向左弹出BlockingDequeueItemFromList
先取出最老的,再向右弹出
所以,三个不同的方法,三个不同的名称,其中两个做同样的事情。
此外,还有这些方法:
RemoveStartFromList
BlockingRemoveStartFromList
RemoveEndFromList
但是没有BlockingRemoveEndFromList
。我猜是 BlockingPopx...
为什么不将其称为 PopLeft 和 PopRight,或者一种方法 Pop,其参数说明从何处弹出?
API 具有描述性含义,以提高不熟悉 redis keycode commands.
的开发人员在正常代码库中的可读性但是如果你想知道每个 API 所做的操作,只需搜索 github.com/ServiceStack/ServiceStack.Redis source code to see what Redis command they call. Or if you're just interested in the List APIs a lot of them are defined in RedisClient_List.cs.
你很少会想要使用调用 redis blocking commands 的 Blocking*
API 除非那是你想要阻塞线程的特定行为,直到一个元素已添加到列表中。
其他的API都是正常的操作,看你想怎么对待列表数据结构了。 IMO API 名称对它们的行为非常具有描述性,例如如果你想把它当作一个列表,那就是:
将项目添加到列表
PrependItemToList
- 添加到列表开头 (LPUSH)AddItemToList
- 将项目添加到列表末尾 (RPUSH)
添加项目范围
PrependRangeToList
- 将元素范围添加到列表的开头 (LPUSH[])AddRangeToList
- 将一系列元素添加到列表末尾 (RPUSH[])
从列表中删除项目
RemoveStartFromList
- 从列表开头删除一个项目 (LPOP)RemoveEndFromList
- 从列表末尾删除一个项目 (RPOP)
如果您喜欢在代码库中使用不同的命名法,则上述命令也有别名,例如如果您想将列表视为不同的数据结构,例如队列或堆栈,您会改用成对的 APIs 用于处理它们,即:
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-server 上相同的命令名称,但需要将原始 byte[]
类型转换为 UTF- 8 string
在适当的地方。