ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

asp.net core 使用redis(StackExchange.Redis) 实现分布式缓存

2020-06-08 11:07:52  阅读:724  来源: 互联网

标签:core asp return Redis db redisClient key public


首先Windows安装redis并将redis设置成服务

参考网址:https://blog.csdn.net/Mrqiang9001/article/details/79428976

引用包StackExchange.Redis

<PackageReference Include="StackExchange.Redis" Version="2.1.30" />

一、添加配置(appsettings.json)

  "ConnectionStrings": {
    "Redis": "XXX.XX.XX.XXX,password=******,DefaultDatabase=0"
  },

二、添加服务依赖(Startup.cs)

RedisClient.redisClient.InitConnect(Configuration);

三、redis帮助类(RedisClient)

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

namespace Dw.Util.Helper
{
    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 = ConfigHelper.GetValue("ConnectionStrings:Redis");
                redisMultiplexer = ConnectionMultiplexer.Connect(RedisConnection);
                db = redisMultiplexer.GetDatabase();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                redisMultiplexer = null;
                db = null;
            }
        }

        public RedisClient()
        {

        }
 
        /// <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);
        }
    }
}

四、在控制器中使用

        #region Redis测试
        /// <summary>
        /// Redis测试
        /// </summary>
        /// <returns></returns>
        [Route("Redis")]
        [HttpGet]
        public ActionResult Redis()
        {
            var redisResult = RedisClient.redisClient.GetStringKey("myKey");
            return Ok(new { code = "200", res = new { msg = redisResult.ToString() } });
        }
        #endregion

 

标签:core,asp,return,Redis,db,redisClient,key,public
来源: https://www.cnblogs.com/yechangzhong-826217795/p/13064375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有