发布:2022/1/26 17:11:43作者:管理员 来源:本站 浏览次数:1514
StackExchange.Redis是一个.Net平台上使用较为广泛的一个Redis封装
1.安装Redis
前提是得先在本机上安装Redis,由于我是在window上,访问以下链接下载windows安装包
https://github.com/microsoftarchive/redis/releases
若是安装在linux中,则直接访问redis.io ,redis官网上有linux安装包
打开链接后,找到最新的release稳定版,选择msi后缀的安装包,下载,如图:
下载完毕后,安装即可
具体步骤可参考:https://www.cnblogs.com/jaign/articles/7920588.html
2.打开VS2019,新建一个.NetCore项目,选择API,如图:
3.创建后,先引入StackExchange.Redis的Nuget包,如下图:
4.在appsettings.json中添加connection连接字符串:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RedisConnectionString": "127.0.0.1,password=123456,DefaultDatabase=0"
}
}
5.然后新建一个RedisClient.cs 帮助类,简单封装了一下redis的string操作:
RedisClient.cs 帮助类,如下:
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace redisTest
{
public class RedisClient
{
private static readonly object Locker = new object();
private ConnectionMultiplexer redisMultiplexer;
IDatabase db = null;
private static RedisClient _redisClient = null;
public static RedisClient redisClient
{
get
{
if (_redisClient == null)
{
lock (Locker)
{
if (_redisClient == null)
{
_redisClient = new RedisClient();
}
}
}
return _redisClient;
}
}
public void InitConnect(IConfiguration Configuration)
{
try
{
var RedisConnection = Configuration.GetConnectionString("RedisConnectionString");
redisMultiplexer = ConnectionMultiplexer.Connect(RedisConnection);
db = redisMultiplexer.GetDatabase();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
redisMultiplexer = null;
db = null;
}
}
public RedisClient()
{
}
#region String
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="value">保存的值</param>
/// <param name="expiry">过期时间</param>
public bool SetStringKey(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{
return db.StringSet(key, value, expiry);
}
/// <summary>
/// 获取单个key的值
/// </summary>
public RedisValue GetStringKey(string key)
{
return db.StringGet(key);
}
/// <summary>
/// 获取一个key的对象
/// </summary>
public T GetStringKey<T>(string key)
{
if (db == null)
{
return default;
}
var value = db.StringGet(key);
if (value.IsNullOrEmpty)
{
return default;
}
return JsonConvert.DeserializeObject<T>(value);
}
/// <summary>
/// 保存一个对象
/// </summary>
/// <param name="obj"></param>
public bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
{
if (db == null)
{
return false;
}
string json = JsonConvert.SerializeObject(obj);
return db.StringSet(key, json, expiry);
}
#endregion
}
}
6.在Startup.cs入口中 初始化RedisClient 的连接:
Startup.cs文件如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace redisTest
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//初始化redis
RedisClient.redisClient.InitConnect(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
7.最后,修改下默认的ValueController.cs
ValueController.cs如下:
using System;using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace redisTest.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
var redisResult = RedisClient.redisClient.GetStringKey<int>("key1");
//若redis没有数据,则取数据并设置redis
if (redisResult == null || redisResult == default(int))
{
Console.WriteLine("redisResult is empty");
RedisClient.redisClient.SetStringKey("key1", id.ToString());
return id.ToString();
}
return redisResult.ToString();//有则直接返回
}
}
}
F5运行,输入:https://localhost:5001/api/values/100
返回100,此时redis中的数据库已经存入了 key1,100.
再次访问https://localhost:5001/api/values/99,还是会返回100,因为已经从redis中取数据了
附上项目截图:
本文简单介绍了下.NetCore Web项目中使用StackExchange.Redis的方法
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4