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操作】