C# Redis 缓存使用

5972 人阅读
分类:

1. 先安装redis客户端,自己去网上下载安装,配置好链接账号,密码

2. vs使用nuget安装redis

Install-Package CachingFramework.Redis -Version 10.0.4

3. RedisHelper类

public class RedisHelper
{
    /// <summary>
    /// redis连接字符串
    /// </summary>
    public static readonly string RedisConnectionString = "RedisConnectionString".GetAppSetting<string>();

    /// <summary>
    /// RedisCache上下文对象延迟
    /// </summary>
    private static readonly Lazy<RedisContext> LazyContext = new Lazy<RedisContext>(() => new RedisContext(RedisConnectionString));

    /// <summary>
    /// RedisCache上下文对象
    /// </summary>
    private static RedisContext Context = LazyContext.Value;

    /// <summary>
    /// Redis连接状态
    /// </summary>
    /// <returns>true:成功</returns>
    private static bool CanConnected()
    {
        try
        {
            return Context.GetConnectionMultiplexer().IsConnected;
        }
        catch (Exception ex)
        {
            LogHelper.Error("Redis 连接异常:" + ex.ToString());
        }

        return false;
    }

    #region Object

    /// <summary>
    /// 设置redis
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <param name="expiry"></param>
    /// <returns></returns>
    public static bool Set(string key, object value, TimeSpan? expiry = null)
    {
        if (!CanConnected() || string.IsNullOrWhiteSpace(key))
            return false;

        try
        {
            Context.Cache.SetObject(key, value, expiry); //value.GetType().IsValueType
            return true;
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis Set异常:" + ex.ToString());
        }

        return false;
    }

    /// <summary>
    /// 设置redis
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    /// <param name="expiry"></param>
    /// <returns></returns>
    public static bool Set(string key, object value, string[] tags, TimeSpan? expiry = null)
    {
        if (!CanConnected() || string.IsNullOrWhiteSpace(key))
            return false;

        try
        {
            Context.Cache.SetObject(key, value, tags, expiry); //value.GetType().IsValueType
            return true;
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis Set异常:" + ex.ToString());
        }

        return false;
    }

    /// <summary>
    /// 获取redis
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <returns></returns>
    public static T Get<T>(string key)
    {
        bool flag;
        return Get<T>(key, out flag);
    }

    /// <summary>
    /// 获取redis
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <param name="flag"></param>
    /// <returns></returns>
    public static T Get<T>(string key, out bool flag)
    {
        if (CanConnected() && !string.IsNullOrWhiteSpace(key))
        {
            try
            {
                var result = Context.Cache.GetObject<T>(key);
                flag = null != result;
                return result;
            }
            catch (Exception ex)
            {
                // 异常日志
                LogHelper.Error("Redis Get异常:" + ex.ToString());
            }
        }

        flag = false;
        return default(T);
    }

    /// <summary>
    /// 获取redis
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <param name="flag"></param>
    /// <returns></returns>
    public static IEnumerable<string> GetKeysByTag(string[] tags)
    {
        if (CanConnected())
        {
            try
            {
                var result = Context.Cache.GetKeysByTag(tags);

                return result;
            }
            catch (Exception ex)
            {
                // 异常日志
                LogHelper.Error("Redis Get异常:" + ex.ToString());
            }
        }

        return default(IEnumerable<string>);
    }
    #endregion

    #region Check

    /// <summary>
    /// redis key是否存在
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static bool KeyExist(string key)
    {
        if (!CanConnected()) return false;

        try
        {
            return Context.Cache.KeyExists(key);
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis KeyExist异常:" + ex.ToString());
        }

        return false;
    }

    #endregion

    #region Remove

    /// <summary>
    /// 移除redis
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static bool Remove(string key)
    {
        if (!CanConnected()) return false;

        try
        {
            return Context.Cache.Remove(key);
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis Remove异常:" + ex.ToString());
        }

        return false;
    }

    /// <summary>
    /// 移除redis
    /// </summary>
    /// <param name="keys"></param>
    public static void Remove(string[] keys)
    {
        if (!CanConnected()) return;
        if (null == keys || keys.Length == 0) return;

        try
        {
            Context.Cache.Remove(keys);
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis Remove异常:" + ex.ToString());
        }
    }

    /// <summary>
    /// 移除redis
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static void RemoveTagsFromKey(string key, string[] tags)
    {
        if (!CanConnected()) return;

        try
        {
            Context.Cache.RemoveTagsFromKey(key, tags);
        }
        catch (Exception ex)
        {
            // 异常日志
            LogHelper.Error("Redis Remove异常:" + ex.ToString());
        }

    }

    #endregion
}

4.添加缓存

[Serializable]
public class UserInfo
{
    /// <summary>
    /// 用户编号
    /// </summary>
    public int UserId { get; set; }
    /// <summary>
    /// 用户名
    /// </summary>
    public string UserName { get; set; }
}

var model = new UserInfo();
model.UserId = 100;
model.UserName = "mike";

//设置缓存20分钟
RedisHelper.Set("UserInfo_" + model.UserId, JsonConvert.SerializeObject(model),new TimeSpan(0, 20, 0));

5.获取缓存内容

string userInfoCache = RedisHelper.Get<string>("UserInfo_100");
if (!string.IsNullOrEmpty(userInfoCache))
{
    var UserTokenModel = JsonConvert.DeserializeObject<UserInfo>(userInfoCache);
}


和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行