通过C#学习Redis01(字符串操作)

环境:
redis 3.2.100
asp.net core 3.1
freeredis 1.1.4

using FreeRedis;
using System;
using System.Threading;

namespace RedisStu02
{
    
    
    internal class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            RedisClient cli = new RedisClient("127.0.0.1:6379,password=,defaultDatabase=0");
            #region 字符串操作
            cli.Set("stuName-1", "刘贺飞");
            cli.Set("stuID-1", "20180001");
            cli.Set("age-1", "22");
            cli.Set("sex-1", "男");
            cli.Set("height-1", "171");
            cli.Set("weight-1", "75");
            cli.Set("birthday-1", "1996-06-21");
            cli.Set("classname-1", "软件工程1班");
            //多少秒之后过期
            cli.Set("expire-1", "5", timeoutSeconds: 2);
            //Thread.Sleep(2200);
            Console.WriteLine(cli.Get("expire-1"));
            //多少毫秒之后到期
            cli.Set("expire-2", "1", timeout: TimeSpan.FromMilliseconds(1000));
            //Thread.Sleep(1200);
            Console.WriteLine(cli.Get("expire-2"));
            //如果键存在则修改
            Console.WriteLine(cli.Get("stuName-1"));
            cli.Set("stuName-1", "刘河飞", TimeSpan.FromSeconds(0), false, false, true, false);
            Console.WriteLine(cli.Get("stuName-1"));
            //如果键不存在则修改
            Console.WriteLine(cli.Get("stuName-1"));
            cli.Set("stuName-1", "刘河飞111", TimeSpan.FromSeconds(0), false, true, false, false);
            Console.WriteLine(cli.Get("stuName-1"));
            //批量设置
            cli.MSet("stuName-2", "赵雨梦", "stuID-2", "20181762",
                "age-2", "24", "sex-2", "女", "height-2", "175",
                "weight-2", "73", "birthday-2", "1994-04-23",
                "classname-2", "网络工程1班");
            cli.MSet("stuName-3", "宋飞", "stuID-3", "20180023",
               "age-3", "23", "sex-3", "男", "height-3", "168",
               "weight-3", "67", "birthday-3", "1995-05-18",
               "classname-3", "软件工程2班");
            cli.MSet("stuName-4", "陈慧", "stuID-4", "20181120",
               "age-4", "23", "sex-4", "女", "height-4", "170",
               "weight-4", "64", "birthday-4", "1995-03-15",
               "classname-4", "信息管理1班");
            cli.MSet("stuName-5", "孙玉", "stuID-5", "20180097",
              "age-5", "22", "sex-5", "女", "height-5", "170",
              "weight-5", "64", "birthday-5", "1996-09-10",
              "classname-5", "软件工程2班");
            //设置不存在的键值对
            cli.SetNx("collegeName", "计算机学院");
            Console.WriteLine(cli.Get("collegeName"));
            cli.SetNx("collegeName", "计算机工程学院");
            Console.WriteLine(cli.Get("collegeName"));
            //批量设置不存在的键值
            var msetRes = cli.MSetNx("collegeName1", "计算机学院", "collegeName2", "计算机工程学院");
            Console.WriteLine("批量设置不存在的键结果" + msetRes);
            Console.WriteLine(cli.Get("collegeName1"));
            Console.WriteLine(cli.Get("collegeName2"));
            //获取多个键值
            Console.WriteLine("获取多个键值");
            var mgetRes = cli.MGet("collegeName1", "collegeName2", "noexits");
            Console.WriteLine(mgetRes[0]);
            Console.WriteLine(mgetRes[1]);
            Console.WriteLine(mgetRes[2]);//如果没有则返回空字符串
            //截取字符串,汉字是utf-8 一个字代表三个字符
            Console.WriteLine(cli.GetRange("collegeName1", 0, 2));
            //下标从0开始(字符串截取)。start和end参数是整数,可以取负值。当取负值时,表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个字符,以此类推。
            Console.WriteLine(cli.GetRange("collegeName1", -3, -1));
            //设置偏移量
            //使用SETBIT命令对key所存储的字符串值设置或清除指定偏移量上的位(bit)。value参数值决定了位的设置或清除,value值取0或1。当key不存在时,自动生成一个新的字符串值。这个字符串是动态的,它可以扩展,以确保将 value 保存到指定的偏移量上。当这个字符串扩展时,使用0来填充空白位置。offset参数必须是大于或等于0,并且小于2 ^ 32 (bit映射被限制在512MB之内)的正整数。在默认情况下,bit初始化为0。
            cli.SetBit("bittest1", 2, true);
            //对key所存储的字符串值,使用GETBIT命令来获取指定偏移量上的位(bit)。当offset的值超过了字符串的最大长度,或者key不存在时,返回0。
            Console.WriteLine(cli.GetBit("bittest1", 2));
            //设置生存时间秒
            cli.SetEx("setnx1", 1, "2");
            Console.WriteLine(cli.Get("setnx1"));
            Thread.Sleep(1100);
            Console.WriteLine(cli.Get("setnx1"));
            //设置生存时间毫秒
            cli.PSetEx("setnx2", 1000, "setnx2");
            Console.WriteLine(cli.Get("setnx2"));
            Thread.Sleep(1100);
            Console.WriteLine(cli.Get("setnx2"));
            //使用SETRANGE命令从指定的位置(offset)开始将key的值替换为新的字符串。比如旧值为hello world,执行命令SETRANGE 5 Redis,表示从第5个下标位置开始替换为新的字符串Redis,其结果为helloredis。如果有不存在的key,就当作空白字符串处理。
            cli.Set("setrange1", "helle world");
            Console.WriteLine(cli.Get("setrange1"));
            cli.SetRange("setrange1", 5, "redis");
            Console.WriteLine(cli.Get("setrange1"));

            cli.Set("setrange2", "你好 世界");
            Console.WriteLine(cli.Get("setrange2"));
            cli.SetRange("setrange2", 7, "redis111");//替换汉字是按照utf-8格式来的,英文字符需要超6位,如果替换redis就会出现?
            Console.WriteLine(cli.Get("setrange2"));
            //为键设置新值
            Console.WriteLine(cli.GetSet("setrange2", "redis"));
            Console.WriteLine(cli.Get("setrange2"));
            //为键追加值
            cli.Append("setrange2", " hello");
            Console.WriteLine(cli.Get("setrange2"));
            //计算bit数量
            Console.WriteLine(cli.BitCount("setrange2", 0, 3));
            cli.SetBit("bitcount1", 0, true);
            cli.SetBit("bitcount1", 1, false);
            cli.SetBit("bitcount1", 2, true);
            Console.WriteLine(cli.BitCount("bitcount1", 0, 3));//2
            /*
             使用BITOP命令对一个或多个保存二进制位的字符串key进行位元运算,并将运算结果保存到destkey中。operation 表示位元操作符,它可以是AND、OR、NOT、XOR 这 4种操作中的任意一种。具体操作如下。

● BITOP AND destkey key [key...]:表示对一个或多个key求逻辑并,并将结果保存到destkey中。

● BITOP OR destkey key [key...]:表示对一个或多个key求逻辑或,并将结果保存到destkey中。

● BITOP NOT destkey key:表示对给定key求逻辑非,并将结果保存到destkey中。

● BITOP XOR destkey key [key...]:表示对一个或多个key求逻辑异或,并将结果保存到destkey中。

除NOT操作之外,其余的操作都可以接收一个或多个key作为参数。当使用BITOP命令来进行不同长度的字符串的位元运算时,较短的那个字符串所缺少的部分将会被看作 0。空的key也被看作包含0的字符串序列。

返回值:返回保存到destkey中的字符串的长度,这个长度和输入key中最长的字符串的长度相等。
             */
            cli.SetBit("bits-1",0,true);
            cli.SetBit("bits-1", 5, true);

            cli.SetBit("bits-2", 3, true);
            cli.SetBit("bits-2", 5, true);
            cli.SetBit("bits-2", 7, true);
            /*
             bits-1 [1,0,0,0,0,1,0,0]
             bits-2 [0,0,0,1,0,1,0,1]
             */
            //交集
            cli.BitOp(BitOpOperation.and,"result", "bits-1", "bits-2");
            //只有5
            Console.WriteLine(cli.GetBit("result",5));
            Console.WriteLine(cli.GetBit("result", 7));//false
            Console.WriteLine(cli.GetBit("result", 0));//false
            //并集
            cli.BitOp(BitOpOperation.or, "result", "bits-1", "bits-2");
            Console.WriteLine(cli.GetBit("result", 0));
            Console.WriteLine(cli.GetBit("result", 3));
            Console.WriteLine(cli.GetBit("result", 5));
            Console.WriteLine(cli.GetBit("result", 7));
            //非
            cli.BitOp(BitOpOperation.not, "result", "bits-1");
            Console.WriteLine(cli.GetBit("result", 0));//false
            Console.WriteLine(cli.GetBit("result", 5));//false
            //与或
            cli.BitOp(BitOpOperation.xor, "result", "bits-1", "bits-2");
            Console.WriteLine(cli.GetBit("result", 0));
            Console.WriteLine(cli.GetBit("result", 3));
            Console.WriteLine(cli.GetBit("result", 5));//false
            Console.WriteLine(cli.GetBit("result", 7));

            //统计键的字符长度
            Console.WriteLine($"{
      
      cli.Get("setrange2")}长度为:{
      
      cli.StrLen("setrange2")}");
            cli.Set("setrange2", "你好,世界");
            Console.WriteLine($"{
      
      cli.Get("setrange2")}长度为:{
      
      cli.StrLen("setrange2")}");//1个汉字占3个长度
            //键值减1
            Console.WriteLine(cli.Decr("incr1"));
            Console.WriteLine(cli.DecrBy("incr1",5));
            //键值加1
            Console.WriteLine(cli.Incr("incr1"));
            Console.WriteLine(cli.IncrBy("incr1", 5));
            //增加浮点数
            Console.WriteLine(cli.IncrByFloat("incrbyfloat1",1.01M));
            Console.WriteLine(cli.IncrByFloat("incrbyfloat1", -1.01M));
            #endregion
            Console.WriteLine("执行完毕");
            Console.ReadKey();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36437991/article/details/131567592