.NET使用StackExchange.Redis

using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;

namespace ABenNetCore.Redis.Xunit
{
    public class RedisClientFactory
    {
        /// <summary>
        /// 连接字符串,一般写在配置文件里面
        /// </summary>
        private static readonly string ConnectionString = "127.0.0.1:16379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=10000";

        /// <summary>
        /// 上锁,单例模式
        /// </summary>
        private static object locker = new object();

        /// <summary>
        /// 连接对象
        /// </summary>
        private static IConnectionMultiplexer _connection;

        /// <summary>
        /// 获取并发链接管理器对象
        /// </summary>
        private static IConnectionMultiplexer _redis;

        public static IConnectionMultiplexer Instance
        {
            get
            {
                if (_redis == null)
                {
                    lock (locker)
                    {
                        _redis = _redis ?? CreateConnection();
                        return _redis;
                    }
                }
                return _redis;
            }
        }

        /// <summary>
        /// 创建连接
        /// </summary>
        /// <returns></returns>
        private static IConnectionMultiplexer CreateConnection()
        {
            if (_connection != null && _connection.IsConnected)
            {
                return _connection;
            }
            lock (locker)
            {
                if (_connection != null && _connection.IsConnected)
                {
                    return _connection;
                }

                if (_connection != null)
                {
                    _connection.Dispose();
                }
                _connection = ConnectionMultiplexer.Connect(ConnectionString);
            }
            return _connection;
        }
    }
}

  

posted @ 2022-07-17 22:12  跟着阿笨一起玩.NET  阅读(196)  评论(0编辑  收藏  举报