首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servicestack.Redis如何使用GetRange特性

Servicestack.Redis如何使用GetRange特性
EN

Stack Overflow用户
提问于 2022-04-28 15:14:42
回答 2查看 51关注 0票数 1

我需要使用redis命令格朗。我使用它检索我存储的散列和字符串内容,以评估在内存缓存中使用side时是否更改了字符串内容。

使用(RedisClient.cs)无法访问get范围函数,因为它是不可用的

如何在使用RedisClient时使用GETRANGE命令

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-29 05:17:36

用于GetRange()SetRange()的UTF-8字符串APIs现已添加到IRedisClient中。

代码语言:javascript
复制
public interface IRedisClient
{
    string Slice(string key, int fromIndex, int toIndex);
    long InsertAt(string key, int offset, string value);
    //...
}

和异步版本到:

代码语言:javascript
复制
public interface IRedisClientAsync
{
    ValueTask<string> SliceAsync(string key, int fromIndex, int toIndex, CancellationToken token = default);
    ValueTask<long> InsertAtAsync(string key, int offset, string value, CancellationToken token = default);
    //...
}

此更改可从v6.0.3 (即现在的可在MyGet上获得 )中获得。

票数 1
EN

Stack Overflow用户

发布于 2022-04-28 15:14:42

Update:从版本6.0.3 (ServiceStack.Redis)中,可以直接从RedisClient访问该特性。感谢神话的信息。

通过研究GitHub源代码,您可以看到RedisClient扩展了https://github.com/ServiceStack/ServiceStack.Redis/blob/b9a09632e0c5a9c46223854e8df9631595d77d6c/src/ServiceStack.Redis/RedisNativeClient.cs#L687,后者确实有可用的GetRange方法,因此第一个解决方案如下:

代码语言:javascript
复制
var nativeClient = redisClient as RedisNativeClient;
var prefix = nativeClient?.GetRange(key, from, to)?.FromUtf8Bytes();

这个解决方案很好,很简单,而且可能永远都能工作,但是我们总是依赖ServiceStack来实现RedisClient扩展RedisNativeClient,但是我们不能100%肯定它。

另一种解决方案是利用LUA脚本执行特性,您可以:

代码语言:javascript
复制
var prefix = redisClient.ExecLuaAsString("return redis.call('GETRANGE', ARGV[1], ARGV[2], ARGV[3])", key, from, to);

就性能而言,本机方法稍微快一些,并且使用的内存较少。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72046235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档