问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

redis怎么用?前景如何?

发布网友 发布时间:2022-04-24 16:11

我来回答

1个回答

热心网友 时间:2022-04-11 15:25

您好,Keys模糊匹配:
在查看了Redis的命令文档(见参考资料4)之后,发现了命令Keys,如获至宝,立马修改了方案。首先我们需要把要搜索的关键词建立为key,这里我把key定义为 "capqueen:user:{id}:{name}",其中{}内的是要用item对应属性替换的。代码如下:
var redis = ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();

var users = new List<User> {
new User{Id = 6, Name = "aaren", Age=10},
new User{Id = 7, Name = "issy", Age=11},
new User{Id = 8, Name = "janina", Age=13},
new User{Id = 9, Name = "karena", Age=14}
};

users.ForEach(item => {
var key = string.Format("capqueen:user:{0}:{1}", item.Id, item.Name);
var value = JsonConvert.SerializeObject(item);
db.StringSet(key, value);
});

建立好的缓存如下图所示:

所有的user都以单独的Key-Value方式存储,那么如何利用Keys搜索呢?我们来看下Redis的Keys命令:
KEYS pattern

查找所有符合给定模式 pattern 的 key 。

KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符号用 \ 隔开

也就是说Keys能够进行简单的模糊匹配,那么我们这里的搜索就可以换成如下的方式:
var redis = ConnectionMultiplexer.Connect("192.168.10.178");
var db = redis.GetDatabase();
var server = redis.GetServer("192.168.10.178", 6379);
var keys = server.Keys(pattern: "capqueen:user:*:a*");
var values = db.StringGet(keys.ToArray());

//反序列化
var jsonValues = new StringBuilder("[");
values.ToList().ForEach(item => jsonValues.Append(item).Append(","));
jsonValues.Append("]");
var userList = JsonConvert.DeserializeObject<List<User>>(jsonValues.ToString());

注意以上的代码里,因为每个value是一个json,为了增加转化时的效率,我先处理成json arry再进行反序列化。
这种方案,确实是解决了我目前的问题,然而我注意到了Redis文档里的一段话:
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
这段话换而言之就是慎用Keys搜索的意思,那么有什么更好的解决方案呢?由于这篇文章我拖得很久了,这里留个问题在末尾,期待有大牛能够帮忙解答,感激不尽。当然还有下一篇内容,我会讲讲我目前的处理方法。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天一共卖出136张电影票,上午卖出去86张,下午卖出多少张。 17届华杯赛小学高年级组的初赛的这道题怎么做? 美特斯工业系统(中国)有限公司MTS公司发展史 mts公司是什么单位 华夏八大古姓是哪八个 ...耳鸣 单眼瞳孔上移 平常手机看得多 会不会是脑瘤 ...了首付给儿子和儿媳买了一套房子,房照上面写的是儿子和儿媳的... GBA最终幻想战略卡住 最终幻想战略版 大bug (狮子战争?就是GBA上的) GBA版最终幻想战略版的BUG问题,很急的 所有软件都可以用QQ登录吗? 除了腾讯QQ软件,还能用什么软件登陆QQ啊! Redis是什么,用来做什么 能登陆qq的软件,除了qq软件还有哪些? Redis 都有哪些应用场景? 能够用qq登录的软件有哪些? 怎样查看redis使用配置文件 如何查看redis最近使用的命令 redis的五种数据类型是什么? 厨柜门用UV板好还是烤漆板好 橱柜门板用烤漆的好还是亚克力的好 烤漆板__木_粒的_比 什么是烤漆板 橱柜的烤漆板和吸塑板有什么区别啊 什么是烤漆门板?有什么特点? 烤漆板与吸塑板有什么区别? 实木烤漆板和生态板的区别是什么? UV门板与烤漆门板有什么区别? 实木烤漆板和烤漆板有什么区别 家里装修想用白色烤漆板,白色烤漆板的特性是什么? 为什么其他软件都可以用qq登录 为什么要使用Redis QQ国际版可以用来登录其他软件么? Redis目前在绝大多数的项目中扮演怎样的角色 沧州的特产有哪些? 沧州有什么特色 好吃的东西吗 凉拌土豆丝好吃吗? 沧州有什么好吃好玩的呀? 凉拌土豆丝最正宗的做法 凉拌土豆丝都哪些家常做法?可以放芥末吗? 怎么在设置的文本框里打字 怎样在文本框中输入多个文字? 凉拌土豆丝做法大全家常 文本框怎么打字 在文本框中如何输入箭头符号 一年级笔画顺序表图是怎样的? 怎样在Word 2003中文本框的图片中打字? 小学汉字笔画名称表 请列举基本笔画的例字,越简单越好,适合幼儿园小朋友认的 小学一年级生字笔顺大全