0.引入.net core环境下Redis的NuGet包,StackExchange.Redis,现目前最新的2.0.519。
      

  1. 帮助类Code:

     using System;
    using System.Collections.Generic;
    using StackExchange.Redis;
    using Newtonsoft.Json;
    using YJT.Web.lib;
    using YJT.Common.Log; namespace YJT.Web.Redis
    {
    /// <summary>
    /// Redis帮助类
    /// </summary>
    public class RedisHelper
    {
    //单例模式
    public static RedisCommon Default { get { return new RedisCommon(); } }
    public static RedisCommon One { get { return new RedisCommon(, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } }
    public static RedisCommon Two { get { return new RedisCommon(, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } }
    public static RedisCommon Three { get { return new RedisCommon(, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } }
    } /// <summary>
    /// Redis操作类
    /// 老版用的是ServiceStack.Redis
    /// .Net Core使用StackExchange.Redis的nuget包
    /// </summary>
    public class RedisCommon
    {
    //redis数据库连接字符串
    private string _conn = UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789";
    private int _db = ; //静态变量 保证各模块使用的是不同实例的相同链接
    private static ConnectionMultiplexer connection; /// <summary>
    /// 构造函数
    /// </summary>
    public RedisCommon() { }
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="db"></param>
    /// <param name="connectStr"></param>
    public RedisCommon(int db, string connectStr)
    {
    _db = db;
    _conn = connectStr;
    } /// <summary>
    /// 缓存数据库,数据库连接
    /// </summary>
    public ConnectionMultiplexer CacheConnection
    {
    get
    {
    try
    {
    if (connection == null || !connection.IsConnected)
    {
    connection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(_conn)).Value;
    }
    }
    catch (Exception ex)
    {
    Log.Debug("RedisHelper->CacheConnection 出错\r\n", ex.Message.ToString());
    return null;
    }
    return connection;
    }
    } /// <summary>
    /// 缓存数据库
    /// </summary>
    public IDatabase CacheRedis => CacheConnection.GetDatabase(_db); #region --KEY/VALUE存取--
    /// <summary>
    /// 单条存值
    /// </summary>
    /// <param name="key">key</param>
    /// <param name="value">The value.</param>
    /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
    public bool StringSet(string key, string value)
    {
    return CacheRedis.StringSet(key, value);
    } /// <summary>
    /// 保存单个key value
    /// </summary>
    /// <param name="key">Redis Key</param>
    /// <param name="value">保存的值</param>
    /// <param name="expiry">过期时间</param>
    /// <returns></returns>
    public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?))
    {
    return CacheRedis.StringSet(key, value, expiry);
    } /// <summary>
    /// 保存多个key value
    /// </summary>
    /// <param name="arr">key</param>
    /// <returns></returns>
    public bool StringSet(KeyValuePair<RedisKey, RedisValue>[] arr)
    {
    return CacheRedis.StringSet(arr);
    } /// <summary>
    /// 批量存值
    /// </summary>
    /// <param name="keysStr">key</param>
    /// <param name="valuesStr">The value.</param>
    /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
    public bool StringSetMany(string[] keysStr, string[] valuesStr)
    {
    var count = keysStr.Length;
    var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count];
    for (int i = ; i < count; i++)
    {
    keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i], valuesStr[i]);
    } return CacheRedis.StringSet(keyValuePair);
    } /// <summary>
    /// 保存一个对象
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <param name="obj"></param>
    /// <returns></returns>
    public bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
    {
    string json = JsonConvert.SerializeObject(obj);
    return CacheRedis.StringSet(key, json, expiry);
    } /// <summary>
    /// 追加值
    /// </summary>
    /// <param name="key"></param>
    /// <param name="value"></param>
    public void StringAppend(string key, string value)
    {
    ////追加值,返回追加后长度
    long appendlong = CacheRedis.StringAppend(key, value);
    } /// <summary>
    /// 获取单个key的值
    /// </summary>
    /// <param name="key">Redis Key</param>
    /// <returns></returns>
    public RedisValue GetStringKey(string key)
    {
    return CacheRedis.StringGet(key);
    } /// <summary>
    /// 根据Key获取值
    /// </summary>
    /// <param name="key">键值</param>
    /// <returns>System.String.</returns>
    public string StringGet(string key)
    {
    try
    {
    return CacheRedis.StringGet(key);
    }
    catch (Exception ex)
    {
    Log.Debug("RedisHelper->StringGet 出错\r\n", ex.Message.ToString());
    return null;
    }
    } /// <summary>
    /// 获取多个Key
    /// </summary>
    /// <param name="listKey">Redis Key集合</param>
    /// <returns></returns>
    public RedisValue[] GetStringKey(List<RedisKey> listKey)
    {
    return CacheRedis.StringGet(listKey.ToArray());
    } /// <summary>
    /// 批量获取值
    /// </summary>
    public string[] StringGetMany(string[] keyStrs)
    {
    var count = keyStrs.Length;
    var keys = new RedisKey[count];
    var addrs = new string[count]; for (var i = ; i < count; i++)
    {
    keys[i] = keyStrs[i];
    }
    try
    { var values = CacheRedis.StringGet(keys);
    for (var i = ; i < values.Length; i++)
    {
    addrs[i] = values[i];
    }
    return addrs;
    }
    catch (Exception ex)
    {
    Log.Debug("RedisHelper->StringGetMany 出错\r\n", ex.Message.ToString());
    return null;
    }
    } /// <summary>
    /// 获取一个key的对象
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <returns></returns>
    public T GetStringKey<T>(string key)
    {
    return JsonConvert.DeserializeObject<T>(CacheRedis.StringGet(key));
    }
    #endregion #region --删除设置过期--
    /// <summary>
    /// 删除单个key
    /// </summary>
    /// <param name="key">redis key</param>
    /// <returns>是否删除成功</returns>
    public bool KeyDelete(string key)
    {
    return CacheRedis.KeyDelete(key);
    } /// <summary>
    /// 删除多个key
    /// </summary>
    /// <param name="keys">rediskey</param>
    /// <returns>成功删除的个数</returns>
    public long KeyDelete(RedisKey[] keys)
    {
    return CacheRedis.KeyDelete(keys);
    } /// <summary>
    /// 判断key是否存储
    /// </summary>
    /// <param name="key">redis key</param>
    /// <returns></returns>
    public bool KeyExists(string key)
    {
    return CacheRedis.KeyExists(key);
    } /// <summary>
    /// 重新命名key
    /// </summary>
    /// <param name="key">就的redis key</param>
    /// <param name="newKey">新的redis key</param>
    /// <returns></returns>
    public bool KeyRename(string key, string newKey)
    {
    return CacheRedis.KeyRename(key, newKey);
    } /// <summary>
    /// 删除hasekey
    /// </summary>
    /// <param name="key"></param>
    /// <param name="hashField"></param>
    /// <returns></returns>
    public bool HaseDelete(RedisKey key, RedisValue hashField)
    {
    return CacheRedis.HashDelete(key, hashField);
    } /// <summary>
    /// 移除hash中的某值
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="key"></param>
    /// <param name="dataKey"></param>
    /// <returns></returns>
    public bool HashRemove(string key, string dataKey)
    {
    return CacheRedis.HashDelete(key, dataKey);
    } /// <summary>
    /// 设置缓存过期
    /// </summary>
    /// <param name="key"></param>
    /// <param name="datetime"></param>
    public void SetExpire(string key, DateTime datetime)
    {
    CacheRedis.KeyExpire(key, datetime);
    }
    #endregion
    }
    }
  2. using引用备注:
    using Newtonsoft.Json;//为第三方转json 对象使用的,再熟悉不过了吧
    using YJT.Common.Log;//是一个记录日志的帮助的类,你可以用你自己的来记录日志。
    using YJT.Web.lib;//此引用是获取.net core中的appsettings.json中配置的信息。 UtilConf.Configuration["RedisConfig:ReadWriteHosts"]获取
  3. 获取appsettings.json的UtilConf.cs帮助类:
     using Microsoft.Extensions.Configuration;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text; namespace YJT.Web.lib
    {
    /// <summary>
    /// 读配置文件
    /// </summary>
    public class UtilConf
    {
    private static IConfiguration config; /// <summary>
    /// 加载配置文件
    /// </summary>
    public static IConfiguration Configuration
    {
    get
    {
    if (config != null) return config;
    config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .Build();
    return config;
    }
    set => config = value;
    }
    }
    }

    此类主要是获取.net core 中的json配置信息。如:UtilConf.Configuration["RedisConfig:ReadWriteHosts"]

  4. StackExchange.Redis下的IDatabase接口还有丰富的操作方法,可自行研究补充帮助类

    分享至此,欢迎留言评论~~~

.net core下Redis帮助类的更多相关文章

  1. .Net Core下 Redis的String Hash List Set和Sorted Set的例子

    1.新建一个.Net Core控制台应用程序,用Nuget导入驱动 打开程序包管理控制台, 执行以下代码. PM> Install-Package ServiceStack.Redis 即可添加 ...

  2. .Net core 下的ConfigurationManager类正确引用方法

    大家在项目中经常会用到需要引用配置文件的情况,这也是我偶然间遇到的问题,菜鸟一枚,如有需纠正多谢指点. 正题 在不先引用using的情况下直接写 ConfigurationManager.AppSet ...

  3. .net core 下使用StackExchange的Redis库访问超时解决

    原文:.net core 下使用StackExchange的Redis库访问超时解决 目录 问题:并发稍微多的情况下Redis偶尔返回超时 给出了参考网址? 结论 小备注 引用链接 问题:并发稍微多的 ...

  4. Java的redis 操作类-优化通用版本

    java操作redis多节点处理方式;http://blog.itpub.net/29254281/viewspace-1188644/首先maven引入依赖包 <dependency> ...

  5. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

  6. SpringBoot整合Redis及Redis工具类撰写

            SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...

  7. .net core 使用 redis

    .net core 使用 redis 个人感觉.net core 对于微软技术而言有很重要的意义 ,所以最近已有时间就想看一看关于.net core 的文章. 今天我就来写一写如何在.net core ...

  8. Linux、Windows下Redis的安装即Redis的基本使用详解

    前言 什么是Redis Redis是一个基于内存的key-value结构数据库.Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母 ...

  9. Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager

    Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...

随机推荐

  1. Hibernate学习——API学习

    一.Configuration对象 解释:Hibernate的配置文件对象,是Hibernate启动加载的第一个对象,它会定位到映射文档的位置,读取配置文件,创建一个SessionFactory对象. ...

  2. QT读取xml配置文件

    //获取字符串字段 QString ConfigHelper::GetStringConfigValue(QString str) { if(str == "InitDeviceNo&quo ...

  3. svn 迁移至git操作手册

    svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...

  4. 【转载】c++中堆、栈内存分配

    一.内存划分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等.其操作方式类似于数据结构中栈.2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时 ...

  5. LOJ #6050. 「雅礼集训 2017 Day11」TRI

    完全不会的数学神题,正解留着以后填坑 将一个口胡的部分分做法,我们考虑计算格点多边形(包括三角形)面积的皮克公式: \[S=a+\frac{1}{2}b-1\text({a为图形内部节点个数,b为边界 ...

  6. Abp通用配置模块的设计

    引言 约定优于配置,配置趋于灵活 约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处, ...

  7. 使用docker-compose 大杀器来部署服务 上(转)

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  8. 了解一下RabbitMQ

    RabbitMQ概述 RabbitMQ是遵从AMQP协议的 通信协议都设计到报文交互,换句话说RabbitMQ就是AMQP协议的Erlang的实现. AMQP说到底还是一个通信协议从low-level ...

  9. 我所不知道的Makefile语法

    问题一: $(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@ 这里的$^和$@是设么意思? 经过查找,该特殊符号的用法如下: 假如:all:library.cpp ma ...

  10. 【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 一般用于分类显示不同模块的layout布局文件. 在res/layout文件夹下创建子目录 res/layout鼠标右键——New— ...