C#操作redis代码汇总
一 Redis是一种支持多种数据结构的键值对数据库
1.1Redis下载地址 :https://github.com/MicrosoftArchive/Redis
建议下载 .msi结尾的应用程序进行安装,会自动安装Redis服务
Redis默认是不能外网访问的
把Redis部署到本地请忽视下面
设置防火墙端口例外
更改redis.conf 文件
bind 127.0.0.1
protected-mode yes
更改为
# bind 127.0.0.1
protected-mode no
然后重启Redis服务,
1.2 Redis支持的数据类型:string、list、set、sortedset、geo(Redis 3.2以上版本),注意不同方法写入的值不能用混了,比如有写list的方法写入的值用获取字符串的方法去获取就有问题了。
1.3 Redis的优点:
支持多种复杂类型的数据结构
高命中的数据是运行在内存中的,数据最终还是可以保存到硬盘中,服务器重启后数据不会丢失
服务器是单线程的,来自所有客户端的所有命令都是串行执行的,不用担心并发修改的问题
支持消息订阅/通知机制,可以用作消息队列
key/value 最大长度允许512M
1.4 Redis的缺点:
Redis是单线程的,因此单个Redis的实例只能使用服务器的一个CPU核,不能充分发挥服务器的性能
二 在 .Net中操作Redis
2.1 在 .net中主要使用两个开源的组件来操作Redis
1. StackExChange.Redis:依赖的组件少,操作接近原生的Redis操作
2. ServiceStack.Redis:依赖的组件较多,封装的程度较高
NuGet命令安装组件 Install-Package StackExChange.Redis
using System; using System.Collections.Generic; using ServiceStack.Redis; namespace SysBuild { class Program { //linux服务器地址 static private string host = "182.180.50.168"; //static private string host = "127.0.0.1"; static private int port = 6379; static RedisClient redisClient = new RedisClient(host, port);//redis服务IP和端口 static void Main(string[] args) { //创建一个键a,指定值 redisClient.Set<string>("a", "1"); //获取键a对应的值 var a1 = redisClient.Get<string>("a"); //删除键a redisClient.Remove("a"); //创建一个键a,指定值,并指定10s有效 redisClient.Set<string>("b", "1", new TimeSpan(0, 0, 60)); //队列操作之入队 redisClient.EnqueueItemOnList("list", "haha"); redisClient.EnqueueItemOnList("list", "haha111111111"); redisClient.EnqueueItemOnList("list", "haha22"); redisClient.EnqueueItemOnList("list", "hahset33333333333333333"); //读取队列深度 var a = redisClient.GetListCount("list"); //队列操作之出队 for (int i = 0; i < a; i++) { Console.WriteLine(redisClient.DequeueItemFromList("list")); } redisClient.SetEntryInHash("Hash", "Name", "wujf"); redisClient.SetEntryInHash("Hash", "Age", "99"); redisClient.SetEntryInHash("Hash", "Sex", "男"); redisClient.SetEntryInHash("Hash", "Address", "上海市XX号XX室"); //集合类指定超时的方法 redisClient.ExpireEntryIn("Hash", new TimeSpan(0, 0, 100)); var dic = redisClient.GetAllEntriesFromHash("Hash"); Console.WriteLine("Key-----Value"); foreach (var keyVal in dic) { Console.WriteLine(string.Format("{0}-----{1}", keyVal.Key, keyVal.Value)); } List<string> haskKey = redisClient.GetHashKeys("Hash"); List<string> haskVal = redisClient.GetHashValues("Hash"); foreach (string key in haskKey) { Console.WriteLine("HashID--Key:{0}", key); } foreach (string val in haskVal) { Console.WriteLine("HashID--val:{0}", val); } //栈使用,先进后出 redisClient.PushItemToList("stack", "1"); redisClient.PushItemToList("stack", "2"); redisClient.PushItemToList("stack", "3"); redisClient.PushItemToList("stack", "4"); int count = redisClient.GetListCount("stack"); for (int i = 0; i < count; i++) { Console.WriteLine(redisClient.PopItemFromList("stack")); } //对Set类型进行操作 redisClient.AddItemToSet("set", "ddd"); redisClient.AddItemToSet("set", "ccc"); redisClient.AddItemToSet("set", "tttt"); redisClient.AddItemToSet("set", "sssh"); redisClient.AddItemToSet("set", "hhhh"); HashSet<string> hashset = redisClient.GetAllItemsFromSet("set"); foreach (string str in hashset) { Console.WriteLine(str); } //求并集 redisClient.AddItemToSet("set1", "aa"); redisClient.AddItemToSet("set1", "bb"); redisClient.AddItemToSet("set2", "bb"); redisClient.AddItemToSet("set2", "cc"); hashset = redisClient.GetUnionFromSets(new string[] { "set1", "set2" }); foreach (string str in hashset) { Console.WriteLine(str); } //求交集 hashset = redisClient.GetIntersectFromSets(new string[] { "set1", "set2" }); //求差集. hashset = redisClient.GetDifferencesFromSet("set1", new string[] { "set2" }); //Sorted Set类型排序 redisClient.AddItemToSortedSet("sortList", "1"); redisClient.AddItemToSortedSet("sortList", "9"); redisClient.AddItemToSortedSet("sortList", "3"); redisClient.AddItemToSortedSet("sortList", "8"); List<string> sortList = redisClient.GetAllItemsFromSortedSet("sortList"); foreach (string str in sortList) { Console.WriteLine(str); } Console.ReadKey(); } } }
另:运行过程推荐使用Redis客户端看看数据变化(ps:我用的redisclient)
推荐api说明
http://www.cnblogs.com/kissdodog/p/3572084.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2017-12-03 ASP.NET MVC 中使用JavaScriptResult
2017-12-03 ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)
2015-12-03 正则表达式中各种字符的含义