栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更新服务堆栈Redis列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更新服务堆栈Redis列表

避免列表:

不幸的是,在这种情况下,Redis列表 并不是真正的好选择 。当我开始使用Redis时,我遇到了同样的问题, 它们似乎是显而易见的选择;)。
如果您将Redis列表用作只读集,或者只想弹出并推送,而不是用于修改列表中间的项目,则Redis列表很有用。

如果知道项目的索引,则可以“更新” Redis列表中的项目,但是它需要 删除重新插入
,并且必须按索引进行,这确定效率非常低。它是通过迭代集合来实现的,因为没有本机的方法可以这样做,但这不是一个好主意。这是的

IndexOf
方法的摘要
RedisClientList<T>

public int IndexOf(T item){    //TODO: replace with native implementation when exists    var i = 0;    foreach (var existingItem in this)    {        if (Equals(existingItem, item)) return i;        i++;    }    return -1;}

因此,要完成您的代码,它将是:

public void UpdatePizza(Pizza pizza){    using (var redisClient = new RedisClient(Host, Port))    {        IRedisTypedClient<Pizza> redis = redisClient.As<Pizza>();        IRedisList<Pizza> pizzas = redis.Lists["pizzas:live"];        var toUpdate = pizzas.First(x => x.Id == pizza.Id);        toUpdate.State = pizza.State;        // Update by removing & inserting (don't do it!)        var index = pizzas.IndexOf(toUpdate);        pizzas.Remove(index);        pizzas.Insert(index, toUpdate);    }        }

但这不是我所说的好方法。它将检索其他比萨饼对象的列表,然后遍历它们直到与索引匹配。并进行两次操作更新!:(在这种情况下,最好避免列出。

解:

当您尝试通过ID来访问披萨时,可以为每个对象创建一个唯一的披萨密钥,这将使您可以直接访问披萨。因此,我们可以使用:

pizzas:live:{Id}

例子:

创建一个比萨

using (var redisClient = new RedisClient()){    IRedisTypedClient<Pizza> redis = redisClient.As<Pizza>();    var pizzaKey = string.Format("pizzas:live:{0}", 123);    var pizza = new Pizza { Id = 123, Type = "Mushroom", State = "Cooking" };    redis.SetEntry(pizzaKey, pizza);}

通过ID获取披萨

using (var redisClient = new RedisClient()){    IRedisTypedClient<Pizza> redis = redisClient.As<Pizza>();    var pizzaKey = string.Format("pizzas:live:{0}", pizza.Id);    var pizza = redis.GetValue(pizzaKey);}

通过ID更新比萨 (只需获取并设置)

using (var redisClient = new RedisClient()){    IRedisTypedClient<Pizza> redis = redisClient.As<Pizza>();    var pizzaKey = string.Format("pizzas:live:{0}", pizza.Id);    var pizza = redis.GetValue(pizzaKey); // Get    pizza.State = "Delivery"; // Update    redis.SetEntry(pizzaKey, pizza); // Save}

移至另一个“列表” (也许:比萨更改状态时)

using (var redisClient = new RedisClient()){    var pizzaKey = string.Format("pizzas:live:{0}", pizza.Id);    var deliveredKey = string.Format("pizzas:delivered:{0}", pizza.Id);    redisClient.RenameKey(pizzaKey, deliveredKey);}

删除披萨

using (var redisClient = new RedisClient()){    var pizzaKey = string.Format("pizzas:live:{0}", pizza.Id);    redisClient.Remove(pizzaKey);}

列出所有活比萨

using (var redisClient = new RedisClient()){    var livePizzaKeys = redisClient.ScanAllKeys("pizzas:live:*").ToList();    List<Pizza> livePizzas = redisClient.GetValues<Pizza>(livePizzaKeys);}

我希望这有帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401380.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号