C# Redis使用及帮助类

C# Redis使用及帮助类

环境准备

目前官网已经没有window版本的安装文件了,window环境需要到github下载,地址如下:https://github.com/microsoftarchive/redis/tags
下载安装文件安装完成后,切换到安装目录,运行如下命令启动redis服务:

redis-server.exe redis.windows.conf

提示服务启动成功后,进行简单的测试
在这里插入图片描述
读取写入及删除都正常,环境准备已经完成。

C#操纵Redis

首先VS通过nuget安装StackExchange.Redis
在这里插入图片描述
然后我们尝试通过StackExchange.Redis对Redis缓存数据库做一些基本的操作。
首先需要引用命名空间

using StackExchange.Redis;

然后建立连接并且选择数据库,注意每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库。

//不传端口号时为默认端口号6379
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();//不传参的情况下选择0号数据库

然后就可以调用API设置读取Redis缓存了,例如我们尝试写入并去读一个字符串

string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"

C# Redis帮助类

基本配置使用我们已经会了,然后尝试封装一个帮助类可以进行一些常用的操作,例如下面我们封装了四个方法,分别可以将一个泛型List添加到缓存,从缓存中获取指定泛型List,通过Lambda表达式删除指定List中满足条件的元素,通过Lambda表达式获取指定List中满足条件的集合。更多的方法如果有兴趣可以自己尝试封装

public class RedisHelper
    {
        static ConnectionMultiplexer redis = null;
        public RedisHelper(string connstr)
        {
            redis = ConnectionMultiplexer.Connect(connstr);
        }
        /// <summary>
        /// 将一个泛型List添加到缓存中
        /// </summary>
        /// <typeparam name="T">泛型T</typeparam>
        /// <param name="listkey">Key</param>
        /// <param name="list">list</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public bool addList<T>(string listkey,List<T> list,int db_index=0)
        {
            var db = redis.GetDatabase(db_index);
            var value = JsonConvert.SerializeObject(list);
            return db.StringSet(listkey, value);
            
        }
        /// <summary>
        /// 通过指定Key值获取泛型List
        /// </summary>
        /// <typeparam name="T">泛型T</typeparam>
        /// <param name="listkey">Key</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public List<T> getList<T>(string listkey,int db_index = 0)
        {
            var db = redis.GetDatabase(db_index);
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    return list;
                }
                else
                {
                    return new List<T>();
                }
            }
            else
            {
                return new List<T>();
            }
        }
        /// <summary>
        /// 删除指定List<T>中满足条件的元素
        /// </summary>
        /// <param name="listkey">Key</param>
        /// <param name="func">lamdba表达式</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public bool delListByLambda<T>(string listkey, Func<T, bool> func,int db_index = 0)
        {
            var db = redis.GetDatabase(db_index);
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    if (list.Count>0)
                    {
                        list = list.SkipWhile<T>(func).ToList();
                        value = JsonConvert.SerializeObject(list);
                        return db.StringSet(listkey, value);
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 获取指定List<T>中满足条件的元素
        /// </summary>
        /// <param name="listkey">Key</param>
        /// <param name="func">lamdba表达式</param>
        /// <param name="db_index">数据库序号,不传默认为0</param>
        /// <returns></returns>
        public List<T> getListByLambda<T>(string listkey, Func<T, bool> func, int db_index = 0)
        {
            var db = redis.GetDatabase(db_index);
            if (db.KeyExists(listkey))
            {
                var value = db.StringGet(listkey);
                if (!string.IsNullOrEmpty(value))
                {
                    var list = JsonConvert.DeserializeObject<List<T>>(value);
                    if (list.Count > 0)
                    {
                        list = list.Where(func).ToList();
                        return list;
                    }
                    else
                    {
                        return new List<T>();
                    }
                }
                else
                {
                    return new List<T>();
                }
            }
            else
            {
                return new List<T>();
            }
        }
    }

在本篇中我们介绍了Redis的安装配置及如何使用C#操纵Redis缓存并且简单封装了一个帮助类,在下篇将通过一个爬虫的案例分享Redis在实际项目中的应用。
下一篇:C#爬取代理IP并存入Redis缓存

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C是计算机编程语言中的一种。它是由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代早期开发的。C语言具有高效、灵活和可移植的特点,广泛应用于系统软件、应用软件和嵌入式系统的开发中。 C语言是结构化的,它允许程序员将程序拆分成多个模块,每个模块执行特定的功能。这种模块化的结构有助于程序的可读性和维护性。 C语言支持大量的运算符和控制结构,包括条件语句(如if-else)和循环语句(如for和while),使得程序员可以进行复杂的逻辑操作和迭代。 C语言还提供了丰富的库函数,包括输入输出、字符串处理、数学运算等,这些库函数可以方便地调用,减少了编写代码的工作量。此外,C语言还支持指针操作,允许直接对内存进行访问,提高了程序的效率。 由于C语言的高效性和可移植性,它成为了许多操作系统和编译器的基础。许多重要的软件和系统都是使用C语言开发的,如Unix操作系统、Linux内核和MySQL数据库等。 虽然C语言有很多优点,但也有一些缺点。例如,它对程序员的编程能力要求较高,需要较多的细节处理。此外,C语言没有内置的面向对象的特性,对于大型项目的开发可能不够方便。 总的来说,C语言是一种强大而灵活的编程语言,它在计算机科学领域有着广泛的应用。无论是初学者还是专业开发人员,都应该学习和掌握C语言,因为它对于理解和实践其他编程语言都非常有帮助

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值