NET操作Redis

本文详细介绍Redis在Windows环境下的安装步骤,包括下载、配置与服务化,同时提供使用StackExchange.Redis库进行.NET操作的实例代码,涵盖客户端连接、数据存储与读取等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis安装

下载地址:https://github.com/microsoftarchive/redis/releases
在这里插入图片描述
下载完后直接解压。
相关程序说明:

  • redis.windows.conf:
    是redis的配置文件。
  • redis-server.exe:
    服务器端。
  • redis-cli:
    命令行客户端。
  • redis-benchmark:
    Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。

Redis启动

启动Redis服务端的三种方式:

  1. CMD命令行切换到Redis文件目录下执行
	redis-server  redis.windows.conf
  1. 进入Redis文件目录直接右键管理员运行redis-server.exe程序
  2. 将redis-server.exe程序设置为window服务。

CMD命令行切换到Redis文件目录执行以下指令

    redis-server --service-install redis.windows.conf //安装服务
    redis-server --service-start //启动服务
    redis-server --service-stop //停止服务
    redis-server --service-uninstall //卸载服务

启动Redis客户端可以直接运行redis-cli.exe

NET操作Redis

NET操作Redis需要使用第三方库,一般都是使用 StackExchange.Redis 和 ServiceStack.Redis。SE是免费的,SS是收费的,这两个dll都能通过NuGet安装。
ServiceStack.Redis:
  在项目下用NuGet下载引用。ServiceStack 4.0 开始已经成为商业产品,不再完全免费,限制每小时只能访问Redis 6000次 ,好在是开源的,网上有办法修改,这里不讨论。
在这里插入图片描述
StackExchange.Redis:
在这里插入图片描述
本文用的是StackExchange.Redis,封装了一个帮助类:
StackExchange.Redis帮助类

操作实例

#region 存储登录的SessionID信息
JHSession session = new JHSession();
session.userid = user.id;
session.username = user.account;
HttpContext.Session.Set("login", Encoding.UTF8.GetBytes("login"));
session.sessionid = HttpContext.Session.Id;
session.useraddress = Request.HttpContext.Connection.RemoteIpAddress.ToString();
session.userbrowserinfo = Request.Headers["HeaderUserAgent"];
session.timeout = 30;
session.createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
session.updatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 

RedisHelper redis = new RedisHelper();
await redis.Set(user.id, session);
#endregion

#region 读取session信息
string userid = "";
if (httpContext.Request.Cookies["user_id"] != null)
{
    userid = httpContext.Request.Cookies["user_id"];
}
if (userid != null)
{
    RedisHelper redis = new RedisHelper();
    var keyExists = await redis.KeyExists(userid);
    if (keyExists)
    {
        //JHSession value = (JHSession)userOnline[userid];
        var value = await redis.Get<JHSession>(userid);
        if (value != null)
        {
        	//处理逻辑
        }
    }
}
#endregion
StackExchange.Redis,这是redis 的.net客户端之一。Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务。目前有不少人在使用    ServiceStack.Redis这个.net客户端,但是这个的最新版本目前已经变成了商业软件。对于    ServiceStack.Redis这种行为,我们没有什么好说的,留给我们的选择是使用低版本的开源版本或者转向其他的客户端。要说到StackExchange.Redis,就不得不说它和BookSleeve的关系。BookSleeve已经是比较完善的redis sdk,但是为什么 BookSleeve 的作者要重新写一个redis 的客户端sdk呢? 有兴趣的同学可以看这里    why i wrote another redis client归纳起来其实就一句话:觉得不爽就推倒重来。StackExchange.Redis 安装直接命令或者手动NuGet。 PM> Install-Package StackExchange.Redis 如果需要强签名的版本走下面的命令,当然作者对于强签名的事也是充满了    怨念  PM> Install-Package StackExchange.Redis.StrongName ConnectionMultiplexerConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,你不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象是必须的。public static ConnectionMultiplexer Manager     {         get         {             if (_redis == null)             {                 lock (_locker)                 {                     if (_redis != null) return _redis;                     _redis = GetManager();                     return _redis;                 }             }             return _redis;         }     }     private static ConnectionMultiplexer GetManager(string connectionString = null)     {         if (string.IsNullOrEmpty(connectionString))         {             connectionString = GetDefaultConnectionString();         }         return ConnectionMultiplexer.Connect(connectionString);     }虽然ConnectionMultiplexer是实现了IDisposable接口的,但是我们基于重用的考虑,一般不需要去释放它。当作内存数据库使用IDatabase db = redis.GetDatabase(); 这里的GetDatabase() 返回的db对象是很轻量级别的,不需要被缓存起来,每次用每次拿即可。IDatabase 的所有方法都有同步和异步的实现。其中的异步实现都是可以await的。一些基础的操作的封装。public bool Remove(string key)     {         key = MergeKey(key);         var db = RedisManager.Manager.GetDatabase(Database);         return db.KeyDelete(key);     }     public string Get(string key)     {         key = this.MergeKey(key);         var db = RedisManager.Manager.GetDatabase(Database);         return db.StringGet(key);     }     public bool Set(string key, string value, int expireMinutes = 0)    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值