首页 > 数据库 >.NET中使用redis

.NET中使用redis

时间:2023-05-25 11:11:34浏览次数:38  
标签:return string db redis key 使用 NET public

NuGet中安装对应的redis操作工具:StackExchange.Redis

 

redis帮助类:

 /// <summary>
    /// Redis读写帮助类
    /// </summary>
    public class RedisHelper
    {
        private string RedisConnectionStr = ConfigurationManager.AppSettings["RedisConnectionStr"];
        private ConnectionMultiplexer redis { get; set; }
        private IDatabase db { get; set; }
        public RedisHelper()
        {
            redis = ConnectionMultiplexer.Connect(RedisConnectionStr);
            db = redis.GetDatabase();
        }
        #region string类型操作
        /// <summary>
        /// set or update the value for string key
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetStringValue(string key, string value)
        {
            return db.StringSet(key, value);
        }
        /// <summary>
        /// 保存单个key value
        /// </summary>
        /// <param name="key">Redis Key</param>
        /// <param name="value">保存的值</param>
        /// <param name="expireMinutes">过期时间</param>
        /// <returns></returns>
        public bool SetStringKey(string key, string value, int expireMinutes = 0)
        {
            if (expireMinutes > 0)
            {
                return db.StringSet(key, value, TimeSpan.FromMinutes(expireMinutes));
            }
            else
                return db.StringSet(key, value);
        }
        /// <summary>
        /// 保存一个对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public bool SetStringKey<T>(string key, T obj, int expireMinutes = 0)
        {
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
            if (expireMinutes > 0)
            {
                return db.StringSet(key, json, TimeSpan.FromMinutes(expireMinutes));
            }
            else
                return db.StringSet(key, json);

        }
        /// <summary>
        /// 获取一个key的对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T GetStringKey<T>(string key) where T : class
        {
            var result = db.StringGet(key);
            if (string.IsNullOrEmpty(result))
            {
                return null;
            }
            try
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(result);
            }
            catch
            {
                return null;
            }
        }
        /// <summary>
        /// get the value for string key
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetStringValue(string key)
        {
            return db.StringGet(key);
        }

        /// <summary>
        /// Delete the value for string key
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool DeleteStringKey(string key)
        {
            return db.KeyDelete(key);
        }
        #endregion

        #region 哈希类型操作
        /// <summary>
        /// set or update the HashValue for string key
        /// </summary>
        /// <param name="key"></param>
        /// <param name="hashkey"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetHashValue(string key, string hashkey, string value)
        {
            return db.HashSet(key, hashkey, value);
        }
        /// <summary>
        /// set or update the HashValue for string key
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="hashkey"></param>
        /// <param name="t">defined class</param>
        /// <returns></returns>
        public bool SetHashValue<T>(String key, string hashkey, T t) where T : class
        {
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(t);
            return db.HashSet(key, hashkey, json);
        }
        /// <summary>
        /// 保存一个集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key">Redis Key</param>
        /// <param name="list">数据集合</param>
        /// <param name="getModelId"></param>
        public void HashSet<T>(string key, List<T> list, Func<T, string> getModelId)
        {
            List<HashEntry> listHashEntry = new List<HashEntry>();
            foreach (var item in list)
            {
                string json = Newtonsoft.Json.JsonConvert.SerializeObject(item);
                listHashEntry.Add(new HashEntry(getModelId(item), json));
            }
            db.HashSet(key, listHashEntry.ToArray());
        }
        /// <summary>
        /// 获取hashkey所有的值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public List<T> HashGetAll<T>(string key) where T : class
        {
            List<T> result = new List<T>();
            HashEntry[] arr = db.HashGetAll(key);
            foreach (var item in arr)
            {
                if (!item.Value.IsNullOrEmpty)
                {
                    result.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(item.Value));
                }
            }
            return result;
        }
        /// <summary>
        /// get the HashValue for string key  and hashkey
        /// </summary>
        /// <param name="key">Represents a key that can be stored in redis</param>
        /// <param name="hashkey"></param>
        /// <returns></returns>
        public RedisValue GetHashValue(string key, string hashkey)
        {
            RedisValue result = db.HashGet(key, hashkey);
            return result;
        }
        /// <summary>
        /// get the HashValue for string key  and hashkey
        /// </summary>
        /// <param name="key">Represents a key that can be stored in redis</param>
        /// <param name="hashkey"></param>
        /// <returns></returns>
        public T GetHashValue<T>(string key, string hashkey) where T : class
        {
            RedisValue result = db.HashGet(key, hashkey);
            if (string.IsNullOrEmpty(result))
            {
                return null;
            }
            T t = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(result);
            return null;
        }
        /// <summary>
        /// delete the HashValue for string key  and hashkey
        /// </summary>
        /// <param name="key"></param>
        /// <param name="hashkey"></param>
        /// <returns></returns>
        public bool DeleteHashValue(string key, string hashkey)
        {
            return db.HashDelete(key, hashkey);
        }
        #endregion
    }

webconfig中配置:

    <!--Redis连接配置-->
    <add key="RedisConnectionStr" value="localhost:6379,DefaultDatabase=0"/>

这里的DefaultDatabase指的是在redis中有15个内存库,其实本质只有一个只是划分为了15个库,由索引下标的方式0~15,在同一个redis服务器中如果有多个redis项目需求,可以分别项目中使用不同的DefaultDatabase

基础使用

  //存
            RedisHelper redis = new RedisHelper();
            redis.SetStringKey("test", 1236, int.Parse("5"));
            //取
            var val = redis.GetStringValue("test");
            labelText.InnerText = val;

标签:return,string,db,redis,key,使用,NET,public
From: https://www.cnblogs.com/sgyq/p/17430578.html

相关文章

  • 面试八股文之redis
    Redis是什么?请介绍一下Redis的特点和用途。Redis的数据结构有哪些?请分别介绍。Redis的持久化方案有哪些?它们之间的区别是什么?Redis如何实现分布式锁?Redis支持的数据类型中,哪些能实现过期时间的功能?Redis单线程为什么能够处理高并发的请求?Redis的并发竞争......
  • 火山引擎DataTester:如何使用A/B测试优化全域营销效果
     当前,营销技术步入了全渠道、全周期的全域时代,随着广泛的数据积累,数据科学技术在营销领域发挥着越来越重要的作用,从消费者人群洞察到智能化信息广告投放,营销的提效让企业得以在转化的每个环节提升影响力,拓展营销的可能性。本文以火山引擎A/B测试(DataTester)应用为例,讲述在企业在......
  • java函数式编程stream流操作lambda表达式使用方法引用用法等练习
    java函数式编程stream流操作lambda表达式使用方法引用用法等练习 @Testvoidtest01(){System.out.println("111");List<Author>authors=getAuthor();//stream流打对象中一个字段authors.stream().distinct().forEach(author......
  • Linux系统,使用PHP连接ORACLE数据库
    首先安装ORACLE的InstantClient环境:在这里下载因为我需要连接11.2.0.4.0版本的ORACLE数据库,所以选取下载了basic-11.2.0.4.0-1.x86_64.rpm和devel-11.2.0.4.0-1.x86_64.rpm,使用如下命令安装:rpm-ivhoracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpmrpm-ivhoracle......
  • Sealos中的sealctl工具的使用说明
    sealctlsealctl是一个命令行工具,用于管理和配置SealOS系统。它包括以下几个子命令:cert:管理证书,用于生成、查看和更新TLS证书。cri:管理容器运行时接口(CRI)配置,例如Docker或containerd。hostname:查看或设置系统主机名。hosts:管理系统的hosts文件,用于定义静态主机名到IP地址映射......
  • Windows中使用GDI抓图
    首先在pro文件中添加gdi32QT+=coreguiwinextrasgreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsCONFIG+=c++11#Thefollowingdefinemakesyourcompileremitwarningsifyouuse#anyQtfeaturethathasbeenmarkeddeprecated(theexactwarning......
  • AnyConnect Windows系统的使用教程
    AnyConnectWindows系统的使用教程:1,下载客户端软件CiscoAnyconnect是Cisco(思科)公司推出的官方专用安全链接客户端请放心使用步骤一下载后,安装anyconnect电脑端软件。1.1双击运行安装程序;1.2同意协议后,点击“Next>”;1.3点击“Install”,开始自动安装;1.4安装完成,点击“Finish......
  • 使用wx.BitmapButton添加一个位图作为按钮的图标
    wx.BitmapButton是wxPython中的一个类,表示一个具有图像的按钮。它继承了wx.Button类,并添加了一个位图作为按钮的图标。wx.BitmapButton的构造函数如下:wx.BitmapButton.__init__(self,parent,id=wx.ID_ANY,bitmap=wx.NullBitmap,pos=wx.DefaultPosition,size=wx.Defa......
  • 【注解使用】使用@Autowired注解警告Field injection is not recommended
    本文目录一、背景描述二、出现原因2.1不允许声明不可变域2.2容易违反单一职责设计原则2.3与依赖注入容器紧密耦合2.4隐藏依赖关系三、解决方案3.1使用@Resource3.2使用于构造函数的依赖注入3.3使用于Setter的依赖注入3.4个人总结四、参考文档Fieldinjectionisnotrecomm......
  • Final Cut Pro视频剪辑使用技巧
    当使用FinalCutPro时,以下技巧可以帮助您提高效率和质量:使用关键帧:使用关键帧可以让您创建动画效果、调整音频级别或修改颜色等。使用快捷键:FinalCutPro有很多快捷键,它们可以加速您的工作流程并减少鼠标点击。例如,“G”键用于将素材添加到时间轴,“E”键用于在时间轴上剪辑素材,“......