Redis 存在五种基础类型: 字符串(String), 队列(List), 哈希(Hash), 集合(Set), 有序集合(Sorted Set).String 的出镜率算是最高的. 本次列举出 String 的常用操作.
Redis 官网: https://redis.io/
一, 字符串 (String) 介绍
字符串 (String) 是 Redis 中最基本的类型, 一个 key 对应着一个 value, 可以理解为字典类型, key-value 形式. 该类型二进制安全的, 对应值可以存储任何数据, 如图片或者序列化后的对象, 对应值最大可以存储 512MB 的数据. 但不是建议去最大化存储, 存储数据尽量小为最佳使用. 从操作出发, 常用操作为这两类:
存储和操作字符串;
存储和计算 int 和 float 类型的数据.
二, 字符串 (String) 常用 API
设置值
eg: 设置 30 秒生存时间, 且必须 firstkey 不存在.
获取值
eg:
批量设置值与批量获取值
eg:
递增或递减值(△1)
eg:
递增或递减值(△n)
eg:
递增浮点数值(△n)
eg:
获取旧值并设置新值
eg:
三, 字符串 (Strng) 不常用 API
追加值
eg:
查询 key
eg:
删除 key
eg:
设置剩余生存时间
eg: 设置 firstkey 生存时间 30 秒, 并通过 ttl 查看剩余生存时间.
获取剩余生存时间
eg:
设置永久生存
eg:
获取字符串长度
eg:
覆盖指定位置开始处的字符
eg:
获取指定位置范围字符串
eg:
四, 字符串 (String) 简单应用场景
模拟限量商品秒杀场景, 来运用一下 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, 运行效果, 部分线程抢购到商品, 部分线程同步抢购时, 商品没有了返回负数, 部分线程抢购时, 活动已结束.
仓库地址:(RedisOperate 文件夹)
2020-04-25, 望技术有成后能回来看见自己的脚步
来源: https://www.cnblogs.com/CKExp/p/12772824.html