初探Redis-基础类型String

目录

Redis存在五种基础类型:字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)。String的出镜率算是最高的。本次列举出String的常用操作。

Redis官网:https://redis.io/ 

 

字符串(String)介绍

字符串(String)是Redis 中最基本的类型,一个 key 对应着一个 value**,**可以理解为字典类型,key-value形式。该类型二进制安全的,对应值可以存储任何数据,如图片或者序列化后的对象,对应值最大可以存储 512MB 的数据。但不是建议去最大化存储,存储数据尽量小为最佳使用。从操作出发,常用操作为这两类:

  • 存储和操作字符串;

  • 存储和计算int和float类型的数据。

162131816_4953148f-9991-4dbf-a4aa-7e5f37aec5b7

 

字符串(String)常用Api

设置值

162133119_8ff91d7d-7ebe-42aa-97a9-b58344876e7c 设置30秒生存时间,且必须firstkey不存在。

162134227_4dbaa4b7-c822-4369-b6f7-6787db9c329a

获取值

162135455_9bf2fd64-4d92-4be8-8e85-63187f831738 162136536_c3c031fe-84fa-41bf-9e9d-b1da798226a9

批量设置值与批量获取值 162137696_9a3dadac-05bb-4406-915b-d081f54ebc0f

162138837_995187b9-1bd3-43ee-9a0c-00a4e67dad9c

递增或递减值(△1)

162140012_cdd5a955-8d29-45e8-90e8-687f7b16c18f 162141154_f6f5eec0-54c6-4fe5-9b29-fa3df13e746b

递增或递减值(△n) 162142349_ebfba8c5-d516-49cd-a974-a036eb7337c0

162143495_36f0228b-bbef-4ecd-9e90-841c51bcd4d6

递增浮点数值(△n) 162144591_6d26dbe5-4130-42fe-a66a-e11b610f789f

162145830_afad1400-8a30-4c65-8ff6-a144b58843cc

获取旧值并设置新值 162146897_525c2c46-0df4-4a53-a840-99518ef1f777

162148031_73af0329-fc5b-42e1-9364-bc67121771ba  

字符串(Strng)不常用Api

追加值162149329_370d7b51-e060-47a2-b3dc-b1c70f2e6d04

162150421_57c628b3-ad98-48ea-88e7-a2e4a20de4e9

查询key162151917_65cbc0a8-906f-4169-bfdf-587ad58f99b9

162153006_86637f92-4658-40d4-aa8d-f6041fb6d8a5

删除key162154060_e703a57b-851d-45b8-accd-5c4e8095f2dd

162155235_0607e72f-e079-4dcd-afe9-ec374664254d

设置剩余生存时间 162156387_bb0f9abf-24e8-4e66-bcd7-4801d1749356

设置firstkey生存时间30秒,并通过ttl查看剩余生存时间。

162157525_96823b39-f87f-4d83-b7d4-1153216f68a5

获取剩余生存时间 162158654_e0a9c512-5956-4d4b-a178-ef70d4eaccae

162159705_0145bc7f-29b1-461b-ae17-e8b9d8e1d203

设置永久生存

162200882_f9ea62dc-830b-443c-902f-55e09f3f7a8c 

162202031_c2e695dc-3517-4cc3-a713-6b9b0fe06205

获取字符串长度 162203240_de3c1334-9a15-49b1-aa71-84b9b342e8d0

162204483_abcdb900-b0c3-41fa-bbf0-6e400b171abc

覆盖指定位置开始处的字符 162205620_5e7ef337-11ae-4f9f-a235-dd1bf3199eaa

162206833_f5a66007-8d4d-48ab-bd81-d529e1273397

获取指定位置范围字符串 162208384_f4c99b01-9003-4fc4-8dfe-d3b2b5e6c095

162209677_2abeb87d-06a2-4186-a4bc-1d61ede76a6f  

字符串(String)简单应用场景

模拟限量商品秒杀场景,来运用一下redis。采用多线程随机请求限量商品,并且用redis控制商品数量的减少。

  1. 采用StackExchange.Redis的Nuget包来连接和管理Redis。并封装一套Redis的操作类。

162210890_7f36ce72-2ca5-4193-bc95-36d7be24c29f

  1. 采用单例模式管理Redis的实例。

162212018_ceff8632-a895-4900-bd1b-e0fdc700dfc8

  1. 模拟多用户限量秒杀模型。通过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......");
                }
            });
        }
    }
}
  1. 运行效果,部分线程抢购到商品,部分线程同步抢购时,商品没有了返回负数,部分线程抢购时,活动已结束。

162213352_ed0cae11-a74a-4814-aee7-20294968bcea  

仓库地址:https://gitee.com/530521314/Partner.TreasureChest/tree/master/RedisOperate

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