ServiceStack.Redis

1、管理 NuGet 添加引用
     ServiceStack.Redis

2、RedisHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;

namespace Test.CoreLibrary
{
    public class RedisHelper
    {
        public List HostPort { get; set; }

        private string[] SplitString(string strSource, string split)
        {
            return strSource.Split(split.ToArray());
        }

        /// 
        /// 自增的开始数值
        /// 
        public int Begin { get; set; }

        private PooledRedisClientManager redisPoolManager;

        /// 
        /// 客户端缓存操作对象
        /// 
        public IRedisClient RedisClient
        {
            get
            {
                if (redisPoolManager == null)
                {
                    #region 方式1(复杂)
                    //string[] WriteServerConStr = SplitString("", ",");
                    //string[] ReadServerConStr = SplitString("", ",");
                    //redisPoolManager = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr,
                    //                 new RedisClientManagerConfig
                    //                 {
                    //                     MaxWritePoolSize = 5,
                    //                     MaxReadPoolSize = 5,
                    //                     AutoStart = true,
                    //                 });
                    #endregion

                    #region 方式2(简单)
                    redisPoolManager = new PooledRedisClientManager(HostPort.ToArray());
                    #endregion
                }
                return redisPoolManager.GetClient();
            }
        }

        /// 
        /// 返回一个在指定过期时间内自动累加的唯一序列号
        /// 
        /// 
        /// 过期时间:分钟
        /// 
        public long GetUniqueNumByTimeout(string key, int timeout)
        {
            using (var client = RedisClient)
            {
                var count = client.IncrementValue(key);
                if (count == 1)
                {
                    client.ExpireEntryIn(key, new TimeSpan(0, 0, timeout, 0));
                }

                return count;
            }
        }

        /// 
        /// 设置key的value并设置过期时间
        /// 
        public void Set(string key, string value, DateTime dt)
        {
            using (var client = RedisClient)
            {
                client.Set(key, value, dt);
            }
        }

        /// 
        /// 写入键值缓存,设置key的value并设置过期时间
        /// 
        public void Set(string key, T value, int timeout)
        {
            using (var client = RedisClient)
            {
                if (timeout <= 0)
                {
                    client.Set(key, value);
                }
                else
                {
                    client.Set(key, value, new TimeSpan(0, 0, timeout));
                }
            }
        }

        /// 
        /// 设置多个key/value
        /// 
        public void Set(Dictionary dic)
        {
            using (var client = RedisClient)
            {
                client.SetAll(dic);
            }
        }

        public void Set(string key, T value)
        {
            using (var client = RedisClient)
            {
                client.Set(key, value);
            }
        }

        /// 
        /// 获取键值缓存
        /// 
        public T Get(string key)
        {
            using (var client = RedisClient)
            {
                return client.Get(key);
            }
        }

        /// 
        /// 在原有key的value值之后追加value
        /// 
        /// 
        /// 
        public void Append(string key, string value)
        {
            using (var client = RedisClient)
            {
                client.AppendToValue(key, value);
            }
        }

        /// 
        /// 获取多个key的value值
        /// 
        /// 
        /// 
        public List Get(List keys)
        {
            using (var client = RedisClient)
            {
                return client.GetValues(keys);
            }
        }

        /// 
        /// 获取多个key的value值
        /// 
        /// 
        /// 
        /// 
        public List Get(List keys)
        {
            using (var client = RedisClient)
            {
                return client.GetValues(keys);
            }
        }

        /// 
        /// 获取旧值赋上新值
        /// 
        /// 
        /// 
        /// 
        public string GetAndSetValue(string key, string value)
        {
            using (var client = RedisClient)
            {
                return client.GetAndSetValue(key, value);
            }
        }

        #region 获取自增计数
        /// 
        /// 获取自增计数
        /// 
        /// 
        /// 分钟
        /// 
        public long GetIncr(string key, int timeout)
        {
            using (var client = RedisClient)
            {
                client.ExpireEntryIn(key, new TimeSpan(0, timeout, 0));
                return client.IncrementValue(key);
            }
        }
        #endregion

        #region 移除
        /// 
        /// 移除缓存
        /// 
        /// 
        /// 
        public bool Remove(string key)
        {
            using (var client = RedisClient)
            {
                return client.Remove(key);
            }
        }
        #endregion

        /// 
        /// 事务操作
        /// 
        public void Transaction()
        {
            using(var client = RedisClient)
            {
                using (var tran = client.CreateTransaction())
                {
                    try
                    {
                        tran.QueueCommand(p =>
                        {
                            //操作redis数据命令
                        });
                        //提交事务
                        tran.Commit();
                    }
                    catch
                    {
                        //回滚事务
                        tran.Rollback();
                    }
                }
            }
        }
    }
}

3、Controller(HomeController)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using IdentityModel;
using log4net;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using Test.CoreLibrary;
using WebApp.Models;

namespace WebApp.Controllers
{
    public class HomeController : Controller
    {
        private IOptions _setting;
        private IConfiguration _configuration;
        private readonly RedisHelper _redis;

        public HomeController(IOptions setting, IConfiguration configuration, RedisHelper redisHelper)
        {
            _setting = setting;
            _configuration = configuration;
            _redis = redisHelper;
        }

        public IActionResult RedisIndex()
        {
            _redis.Set("UserName", "1qaz2wsx");
            _redis.Set("Age", 100);
            _redis.Set("TransactionLock", 100);
            _redis.Set("IsAdmin", true);

            _redis.Get("UserName");
            _redis.Get("Age");
            _redis.Get("TransactionLock");
            _redis.Get("IsAdmin");

            _redis.Remove("UserName");


            #region 事务

            _redis.Transaction();

            using (var client = _redis.RedisClient)
            {
                using (var tran = client.CreateTransaction())
                {
                    try
                    {
                        tran.QueueCommand(p =>
                        {
                            //操作redis数据命令
                        });
                        //提交事务
                        tran.Commit();
                    }
                    catch
                    {
                        //回滚事务
                        tran.Rollback();
                    }
                }
            }
            #endregion

            return View();
        }
    }
}

 

你可能感兴趣的:(.NET,Core)