码迷,mamicode.com
首页 > 其他好文 > 详细

初探Redis-基础类型String

时间:2020-04-25 17:21:57      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:管理   lang   封装   pre   设置   数值   ber   通过   覆盖   

  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、运行效果,部分线程抢购到商品,部分线程同步抢购时,商品没有了返回负数,部分线程抢购时,活动已结束。

   技术图片

 

 仓库地址:https://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate文件夹)

2020-04-25,望技术有成后能回来看见自己的脚步

初探Redis-基础类型String

标签:管理   lang   封装   pre   设置   数值   ber   通过   覆盖   

原文地址:https://www.cnblogs.com/CKExp/p/12772824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!