首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET Core微服务(六)——【redis操作】

ASP.NET Core微服务(六)——【redis操作】

作者头像
红目香薰
发布2022-11-28 16:08:58
5480
发布2022-11-28 16:08:58
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode

ASP.NET Core微服务(六)——【redis操作】:

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

今天主要讲解的是ASP.NET Core使用【redis】,其使用的方法很多,课大致罗列为五种,字符串操作为主有2种,和完整操作的有2种,还有一个ASP.NET Core上下文的还有1种。

【预处理,开启redis服务】:下载地址:【redis服务(windows版)&redis可视化工具.rar_netcore微服务Tokenredis-.Net文档类资源-CSDN下载】(已修改为免费下载)

开启服务:

redis默认端口号:【6379】,一般是个面试题,如何是学生可以背一下。

本机服务强度测试:【redis-benchmark -n 10000 -q】

*服务器保持开启状态,可以进行以下操作*。

1、创建项目【ASP.NET Core】的控制台应用,方便高效一些。直接看效果。不嫌麻烦可以用MVC的view视图

自己找个地方随便创建个控制台项目即可,测试方法如下:

2、引入【NuGet】包

引入【ServiceStack.Redis】包,这个包比较小。

接受许可证:

命名空间:【using ServiceStack.Redis;】

using ServiceStack.Redis;
using System;

namespace redisDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            RedisClient red = new RedisClient();

        }
    }
}

3、开始连接测试redis操作:

操作代码:

using ServiceStack.Redis;
using System;

namespace redisDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            RedisClient red = new RedisClient("127.0.0.1");
            bool isf = red.Set("testInfo","身体康健,财源广进。");
            if (!isf) {
                Console.WriteLine("存储失败");
                return;
            }
            string str = red.Get<string>("testInfo");
            Console.WriteLine(String.Format("testInfo:{0}",str));
        }
    }
}

端口号可以省略,默认为:6379

测试成功,说明redis链接操作没问题。

lpush集合操作【demo】

RedisClient redis = new RedisClient("127.0.0.1");
            redis.Remove("likes");
            //测试
            string s = "吃喝玩乐";
            //字符串转byte[]
            byte[] byteArray = System.Text.Encoding.Default.GetBytes(s);
            redis.LPush("likes",byteArray);
            byte[] vs = redis.LIndex("likes",0);
            //byte[]转字符串
            string str = System.Text.Encoding.Default.GetString(vs);
            Console.WriteLine(str);

由于需要转换byte[],所以需要两次转换。

RedisBaseDB封装包:

需要的命名空间:

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

【RedisBaseDB】完整对象代码如下(一定要注意引用命名空间):

 public class RedisBaseDB
    {
        /// <summary>
        /// 添加与修改字符串key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool SetString(RedisClient redis, string key, string value)
        {
            return redis.Set<string>(key, value);
        }
        /// <summary>
        /// 设置字符串的同时设置过期时间
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="Seconds"></param>
        /// <param name="value"></param>
        public static void SetStringEx(RedisClient redis, string key, int Seconds, string value)
        {
            redis.SetEx(key, Seconds, System.Text.Encoding.Default.GetBytes(value));
        }
        /// <summary>
        /// 获取过期时间
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns>60</returns>
        public static double GetStringEx(RedisClient redis, string key)
        {
            return redis.GetTimeToLive(key).Value.TotalSeconds;
        }

        /// <summary>
        /// 获取字符串key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>string</returns>
        public static string GetString(RedisClient redis, string key)
        {
            return redis.Get<string>(key);
        }
        /// <summary>
        /// 自增key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns>true</returns>
        public static bool Incr(RedisClient redis, string key)
        {
            return redis.Incr(key) > 0;
        }
        /// <summary>
        /// 自减key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns>true</returns>
        public static bool Decr(RedisClient redis, string key)
        {
            return redis.Decr(key) > 0;
        }
        /// <summary>
        /// 删除任何key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool Del(RedisClient redis, string key)
        {
            return redis.Del(key) > 0;
        }

        /// <summary>
        /// 添加哈希对象的单个值
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="hashId">哈希key</param>
        /// <param name="key">对象key</param>
        /// <param name="value">对象value</param>
        /// <returns>true</returns>
        public static bool HSet(RedisClient redis, string hashId, string key, string value)
        {
            return redis.HSet(System.Text.Encoding.Default.GetBytes(hashId), System.Text.Encoding.Default.GetBytes(key), System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 获取哈希对象的单个值
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="hashId">哈希key</param>
        /// <param name="key">对象key</param>
        /// <returns>string</returns>
        public static string HGet(RedisClient redis, string hashId, string key)
        {
            return System.Text.Encoding.Default.GetString(redis.HGet(System.Text.Encoding.Default.GetBytes(hashId), System.Text.Encoding.Default.GetBytes(key)));
        }
        /// <summary>
        /// 获取哈希对象的所有key与value
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="hashId"></param>
        /// <returns>List_string</returns>
        public static List<string> HGetAll(RedisClient redis, string hashId)
        {
            List<string> list = new List<string>();
            byte[][] vs = redis.HGetAll(hashId);
            foreach (var item in vs)
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
        /// <summary>
        /// 获取哈希对象的所有key
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="hashId"></param>
        /// <returns>List_string</returns>
        public static List<string> HKeys(RedisClient redis, string hashId)
        {
            List<string> list = new List<string>();
            foreach (var item in redis.HKeys(hashId))
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
        /// <summary>
        /// 获取哈希对象的所有value
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="hashId"></param>
        /// <returns>List_string</returns>
        public static List<string> HVals(RedisClient redis, string hashId)
        {
            List<string> list = new List<string>();
            foreach (var item in redis.HVals(hashId))
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
        /// <summary>
        /// 向列表左侧添加一个value
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool LPush(RedisClient redis, string key, string value)
        {
            return redis.LPush(key, System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 向列表右侧添加一个value
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool RPush(RedisClient redis, string key, string value)
        {
            return redis.RPush(key, System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 获取start至end的列表信息start!=-1
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns>List_string</returns>
        public static List<string> LRange(RedisClient redis, string key, int start, int end)
        {
            if (start < 0)
            {
                return null;
            }
            List<string> list = new List<string>();
            foreach (var item in redis.LRange(key, start, end))
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
        /// <summary>
        /// 删除列表左侧的第一个值并返回该值
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns>string</returns>
        public static string LPop(RedisClient redis, string key)
        {
            return System.Text.Encoding.Default.GetString(redis.LPop(key));
        }
        /// <summary>
        /// 删除列表右侧的第一个值并返回该值
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <returns>string</returns>
        public static string RPop(RedisClient redis, string key)
        {
            return System.Text.Encoding.Default.GetString(redis.RPop(key));
        }
        /// <summary>
        /// 添加一条Set集合数据
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool SAdd(RedisClient redis, string key, string value)
        {
            return redis.SAdd(key, System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 移除一条Set集合数据
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool SRem(RedisClient redis, string key, string value)
        {
            return redis.SRem(key, System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 获取set集合所有数据
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>List_string</returns>
        public static List<string> GetSetAll(RedisClient redis, string key)
        {
            List<string> list = new List<string>();
            foreach (var item in redis.SMembers(key))
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
        /// <summary>
        /// 添加一条ZSet集合数据
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>true</returns>
        public static bool ZAdd(RedisClient redis, string key, double score, string value)
        {
            return redis.ZAdd(key, score, System.Text.Encoding.Default.GetBytes(value)) > 0;
        }
        /// <summary>
        /// 获取所有成员,进行从高到低排列
        /// </summary>
        /// <param name="redis"></param>
        /// <param name="key"></param>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <returns></returns>
        public static List<string> ZRevRange(RedisClient redis,string key)
        {
            List<string> list = new List<string>();
            foreach (var item in redis.ZRevRange(key, 0, (int)redis.ZCard(key)))
            {
                list.Add(System.Text.Encoding.Default.GetString(item));
            }
            return list;
        }
    }

总结:

这里使用的是最节约环境的包。功能上没什么差别,就是的函数名称得多用几次才能熟练。

希望此文对大家有所帮助,后续会编写:

ASP.NET Core微服务(七)——【docker部署linux上线】

等文章。

此文标题为ASP.NET Core微服务(六)——【redis操作】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【预处理,开启redis服务】:下载地址:【redis服务(windows版)&redis可视化工具.rar_netcore微服务Tokenredis-.Net文档类资源-CSDN下载】(已修改为免费下载)
    • 开启服务:
      • redis默认端口号:【6379】,一般是个面试题,如何是学生可以背一下。
        • 本机服务强度测试:【redis-benchmark -n 10000 -q】
        • *服务器保持开启状态,可以进行以下操作*。
          • 1、创建项目【ASP.NET Core】的控制台应用,方便高效一些。直接看效果。不嫌麻烦可以用MVC的view视图
            • 2、引入【NuGet】包
              • 3、开始连接测试redis操作:
                • 端口号可以省略,默认为:6379
                  • lpush集合操作【demo】
                    • RedisBaseDB封装包:
                      • 总结:
                        • ASP.NET Core微服务(七)——【docker部署linux上线】
                        相关产品与服务
                        云数据库 Redis
                        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档