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