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

2022-11-28 16:08:58 浏览数 (1)

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;】

代码语言:javascript复制
using ServiceStack.Redis;
using System;

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

        }
    }
}

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

操作代码:

代码语言:javascript复制
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】

代码语言:javascript复制
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封装包:

需要的命名空间:

代码语言:javascript复制
    using ServiceStack.Redis;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

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

代码语言:javascript复制
 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操作】

0 人点赞