Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 467|回复: 0

StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)

[复制链接]
  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-5-1 14:31:49 | 显示全部楼层 |阅读模式

    本篇分享有部分瑕疵 请移步修正 http://www.cnblogs.com/tdws/p/6341494.html

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址。http://www.cnblogs.com/tdws/p/5815735.html

    写在前面

    这不是教程,分享而已,也欢迎园友们多提建议和指正。关于更多详细介绍,请到github上看Docs,下面附上地址。

    关于Redis基础控制它台操作有疑问的,欢迎阅读Redis系列命令拾遗分享  http://www.cnblogs.com/tdws/tag/NoSql/

    如今StackService.Redis已经转向商业版本。4.0以下的低版本依然免费和开源,低版本的不更新了,有没有bug谁知道呢?

    但是我们依然有一个非常棒的选择,StackExchange.Redis。我给你一个使用它的理由,StackOverflow在使用它,我想其他的不说,这个理由足够了。

    我要做的事情是什么,我为什么要做这件事情呢?

    相信在平时工作中,我们使用redis大多是调用SOA接口,架构师或者缓存中心封装出dll给我们使用,然后你看不到源码,这很不爽啊!首先我把写博客当成另一种事业,所以我要做的就是分享封装Redis帮助类的方法以及过程,希望能帮助到自己和热爱技术的朋友们。

    StackExchange在github上文档的地址:https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs

    目录

    加强篇  http://www.cnblogs.com/tdws/p/6341494.html

    本系列会包括如下内容,相信大家也掌握了:

    一、基础配置封装

    二、String字符串类型数据操作封装

    三、Hash散列类型数据操作封装

    四、List列表类型数据操作封装(建议自行封装)

    五、Set集合类型数据操作封装(建议自行封装)

    六、Sort Set集合数据类型操作封装(建议自行封装)

    七、发布订阅(Pub/Sub)模式在StackExchange.Redis中的使用

    八、主从配置,哨兵相关配置

    一、基础配置封装

     首先我们要从nuget中引用StackExchange.Redis到解决方案中的项目。

    项目目录结构如下:

    首先给大家看下RedisClientConfiguration.cs的代码。在这里我们定义了Redis链接地址,关于Get方法我们接下来再看。还定义了Port端口,链接超时时间,重试次数,Redis默认使用的数据库0-15,十六个。PreserveAsyncOrder用于配置异步操作是否应以保证其原始交付顺序的方式调用。

    using RedisRepository.Helpers;
    
    namespace RedisRepository
    {
        public static class RedisClientConfigurations
        {
            private static string _url = ConfigurationHelper.Get("RedisServer", "127.0.0.1");
            public static string Url
            {
                get { return _url; }
                set { _url = value; }
            }
    
            private static int _port = 6379;
            public static int Port
            {
                get { return _port; }
                set { _port = value; }
            }
    
            private static int _connectTimeout = 10000;
            public static int ConnectTimeout
            {
                get { return _connectTimeout; }
                set { _connectTimeout = value; }
            }
    
            private static int _connectRetry = 3;
            public static int ConnectRetry
            {
                get { return _connectRetry; }
                set { _connectRetry = value; }
            }
    
            private static int _defaultDatabase = ConfigurationHelper.Get("RedisDataBase", 0);
            public static int DefaultDatabase
            {
                get { return _defaultDatabase; }
                set { _defaultDatabase = value; }
            }
    
            private static bool _preserveAsyncOrder = false;
            public static bool PreserveAsyncOrder
            {
                get { return _preserveAsyncOrder; }
                set { _preserveAsyncOrder = value; }
            }
        }
    }

    下面介绍ConfigurationHelper.cs中的Get方法。这就是获取我们WebConfig配置文件中Redis地址设置,并且必须指定默认地址。

    using System;
    using System.Configuration;
    
    namespace RedisRepository.Helpers
    {
        public static class ConfigurationHelper
        {
            internal static T Get<T>(string appSettingsKey, T defaultValue)
            {
                string text = ConfigurationManager.AppSettings[appSettingsKey];
                if (string.IsNullOrWhiteSpace(text))
                    return defaultValue;
                try
                {
                    var value = Convert.ChangeType(text, typeof(T));
                    return (T)value;
                }
                catch
                {
                    return defaultValue;
                }
            }
        }
    }

    另外就到了我们的关键部分,定义Redis操作类接口IRedisClient.cs以及其实现类RedisClient.cs。接口将来暴露给外部调用者。

    #region 程序集 RedisRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    // Author:吴双 2016.8.28  联系邮箱wscoder@outlook.com
    #endregion
    using System;
    using System.Collections.Generic;
    using StackExchange.Redis;
    
    namespace RedisRepository
    {
        public interface IRedisClient
        {
    
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Newtonsoft.Json;
    using StackExchange.Redis;
    
    namespace RedisRepository
    {
        public class RedisClient : IRedisClient
        {
              
    
            #region 私有公用方法   在其中我们序列化操作使用Newtonsoft.Json组件
    
            private string SerializeContent(object value)
            {
                return JsonConvert.SerializeObject(value);
            }
    
            private T DeserializeContent<T>(RedisValue myString)
            {
                return JsonConvert.DeserializeObject<T>(myString);
            }
    
            #endregion
        }
    }

     

    接下来的几篇分享,我将持续加入相关操作方法。如果我的点滴分享对您有点低帮助,欢迎点击下方红色关注,我将持续分享,共同进步

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-6 19:41 , Processed in 0.153705 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表