标签:管理 lang 封装 pre 设置 数值 ber 通过 覆盖
Redis存在五种基础类型:字符串(String)、队列(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)。String的出镜率算是最高的。本次列举出String的常用操作。
Redis官网:https://redis.io/
字符串(String)是Redis 中最基本的类型,一个 key 对应着一个 value,可以理解为字典类型,key-value形式。该类型二进制安全的,对应值可以存储任何数据,如图片或者序列化后的对象,对应值最大可以存储 512MB
的数据。但不是建议去最大化存储,存储数据尽量小为最佳使用。从操作出发,常用操作为这两类:
eg:设置30秒生存时间,且必须firstkey不存在。
eg:
eg:
eg:
eg:
eg:
eg:
eg:
eg:
eg:
eg:设置firstkey生存时间30秒,并通过ttl查看剩余生存时间。
eg:
eg:
eg:
eg:
eg:
模拟限量商品秒杀场景,来运用一下redis。采用多线程随机请求限量商品,并且用redis控制商品数量的减少。
1、采用StackExchange.Redis的Nuget包来连接和管理Redis。并封装一套Redis的操作类。
2、采用单例模式管理Redis的实例。
3、模拟多用户限量秒杀模型。通过Redis的incr和decr操作控制商品数量。
/// <summary> /// 超卖模型 /// </summary> public class OverSell { private static bool IsGoOn = true;//秒杀活动是否结束 public static void Run() { RedisBase.StringService.StringSet("Stock", 10); for (int i = 0; i < 5000; i++) { int k = i; Task.Run(() =>//每个线程就是一个模拟用户请求 { if (IsGoOn) { var index = RedisBase.StringService.StringDecrement("Stock");//-1并且返回 if (index >= 0) { Console.WriteLine($"{k.ToString("000")} Success,Product Index:{index}"); //... } else { if (IsGoOn) { IsGoOn = false; } Console.WriteLine($"{k.ToString("000")} Failed,Product Index:{index}"); } } else { Console.WriteLine($"{k.ToString("000")} Finish......"); } }); } } }
4、运行效果,部分线程抢购到商品,部分线程同步抢购时,商品没有了返回负数,部分线程抢购时,活动已结束。
仓库地址:https://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate文件夹)
2020-04-25,望技术有成后能回来看见自己的脚步
标签:管理 lang 封装 pre 设置 数值 ber 通过 覆盖
原文地址:https://www.cnblogs.com/CKExp/p/12772824.html