.NetCore Redis使用及帮助类

上一篇讲解了Redis的搭建及ServiceStack.Redis 与 StackExchange.Reids 的区别https://blog.csdn.net/qq_39569480/article/details/105249607

这篇文章遗我们来说下 StackExchange.Redis的使用及帮助类

首先在windows上安装redis  在上边连接中有教程

1.创建net core项目

2.在包管理器中安装StackExchange.Redis的Nuget包,如下图:

4.在appsettings.json中添加connection连接字符串:(redis连接字符串)

 5.然后新建一个RedisClient.cs 帮助类,简单封装了一下redis的读写操作

using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using ServiceStack.Redis;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;


namespace qq.Web.Host.Helper
{
    public class RedisClient
    {
        static ConnectionMultiplexer redis = null; 
        IDatabase db = null;

        public void InitConnect(IConfiguration Configuration)
        {
            try
            {
                var RedisConnection = Configuration.GetConnectionString("RedisConnectionString");
                redis = ConnectionMultiplexer.Connect(RedisConnection);
                db = redis.GetDatabase();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                redis = 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 
        /// <summary>
        /// 将一个泛型List添加到缓存中
        /// </summary>
        /// <typeparam name="T">泛型T</typeparam>
        /// <param name="listkey">Key</param>
        /// <param name="list">list</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public bool addList<T>(string listkey, List<T> list, int db_index = 0)
        {
            if (db == null)
            {
                return false;
            }
            var value = JsonConvert.SerializeObject(list);
            return db.StringSet(listkey, value);

        }
         
        /// <summary>
        /// 通过指定Key值获取泛型List
        /// </summary>
        /// <typeparam name="T">泛型T</typeparam>
        /// <param name="listkey">Key</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public List<T> getList<T>(string listkey, int db_index = 0)
        {
            //var db = redis.GetDatabase(db_index);
            if (db == null)
            {
                return new List<T>();
            }
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    return list;
                }
                else
                {
                    return new List<T>();
                }
            }
            else
            {
                return new List<T>();
            }
        }
        public bool getKeyExists(string listkey, int db_index = 0)
        {
            if (db == null)
            {
                return false;
            }
            if (db.KeyExists(listkey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 删除指定List<T>中满足条件的元素
        /// </summary>
        /// <param name="listkey">Key</param>
        /// <param name="func">lamdba表达式</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public bool delListByLambda<T>(string listkey, Func<T, bool> func, int db_index = 0)
        {
            if (db == null)
            {
                return false;
            }
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    if (list.Count > 0)
                    {
                        list = list.SkipWhile<T>(func).ToList();
                        value = JsonConvert.SerializeObject(list);
                        return db.StringSet(listkey, value);
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 获取指定List<T>中满足条件的元素
        /// </summary>
        /// <param name="listkey">Key</param>
        /// <param name="func">lamdba表达式</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public List<T> getListByLambda<T>(string listkey, Func<T, bool> func, int db_index = 0)
        {
            if (db == null)
            {
                return new List<T>();
            }
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    if (list.Count > 0)
                    {
                        list = list.Where(func).ToList();
                        return list;
                    }
                    else
                    {
                        return new List<T>();
                    }
                }
                else
                {
                    return new List<T>();
                }
            }
            else
            {
                return new List<T>();
            }
        } 
    }

}

6.在Startup.cs入口中 初始化RedisClient 的连接:

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 qqq.Web.Host.Helper
{
    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.最后,在Controller.cs中调用

using System;using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
 
namespace qqq.Web.Host.Helper
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values/5
        [HttpGet]
        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();//有则直接返回
        }
     [HttpGet]
        public ActionResult GetList(string 简称, int 开始索引, int 限定数量) {
            try
            {//缓存中如果存在这个key返回查出的数据  如果不存在则写入缓存    查出数据后进行条件筛选和分页
 
                List<dynamic> 列表 = null;
                if (RedisClient.redisClient.getKeyExists("123"))
                {
                    列表 = RedisClient.redisClient.getList("123");
                }
                else
                {
                    RedisClient.redisClient.addList("123", GetDrugList());//插入key   和集合
                    列表 = RedisClient.redisClient.getList("123");
                }
                if (!string.IsNullOrEmpty(简称))
                {
                    列表 = 列表.Where(x => x.首字母缩写.Contains(简称)).ToList();
                }
                if (列表.Count < 限定数量)
                { 
                    return Json(new { ok = false, msg = "sucess", data = 列表.GetRange(开始索引, 列表.Count) });
                } 
                return Json(new { ok = false, msg = "sucess", data = 列表.GetRange(开始索引, 限定数量) });
            }
            catch (Exception ex)
            {
                return Json(new { ok = false, msg = ex.Message, data = "" });
            } 
        }
    }
}

F5运行,输入:https://localhost:5001/api/values/100

返回100,此时redis中的数据库已经存入了 key1,100.

再次访问https://localhost:5001/api/values/99,还是会返回100,因为已经从redis中取数据了 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香煎三文鱼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值