如何设置(覆盖)哈希中的所有项目

时间:2013-10-18 16:53:13

标签: redis servicestack

我想在Hash中设置所有条目。 (SetAllEntriesToHash)

必须在运行之前清除哈希中的所有项目。

与GetAllEntriesFromHash相反。

1 个答案:

答案 0 :(得分:2)

这里有几个选项。

1)您可以使用高级Redis API让ServiceStack为您解决此问题。

public class Poco
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

...

// Client
var client = new RedisClient("localhost", 6379);

// This will store the object for you in a Redis hash.
client.StoreAsHash(new Poco { Id = 1, Name = "Test Name", Description = "Test Description" });

// This will fetch it back for you.
var result = client.GetFromHash<Poco>(1);

这种方法会使您无法直接处理散列细节。 ServiceStack将为您找出所有内容,并将您发送的对象自动填充到哈希中。如果要更新该对象,只需向其发送一个具有相同ID的新对象。

另一方面,您可以放弃对Redis中数据存储方式的控制,以便更轻松地进行编程。

2)您自己处理所有这些事情。没有 SetAllEntriesToHash 功能预先构建。

// Client
var client = new RedisClient("localhost", 6379);

// Clear all existing keys
var keysToClear =  new Dictionary<string,string>();
client.GetHashKeys("xxxxx").ForEach(k => keysToClear.Add(k, ""));
client.SetRangeInHash("xxxxx", keysToClear);

// Save new key/values.  
client.SetRangeInHash("xxxxx", new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("1", "value 1"),
    new KeyValuePair<string, string>("2", "value 2"),
    new KeyValuePair<string, string>("3", "value 3"),
});

或者,删除并重新创建哈希可能更容易。

我还想提请你注意 RedisNativeClient 。它允许您运行直接映射到http://redis.io/commands的Redis命令。