Redis之 字符串(String)

这是最简单Redis类型。如果你只用这种类型,Redis就像一个可以持久化的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失)。

1、字符串追加操作

        /// <summary>
        /// 在原有key的value值之后追加value
        /// 如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。
        /// 原指令:APPEND key value
        /// 时间复杂度:O(1)。均摊时间复杂度是O(1), 因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间,所以在添加的value较小而且已经存在的 value是任意大小的情况下,均摊时间复杂度是O(1) 。
        /// 参考:http://www.redis.cn/commands/append.html
        /// 模式:节拍序列(Time series)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>返回append后字符串值(value)的长度。</returns>
        public long Append(string key, string value)
        {
            return Redis.AppendToValue(key, value);
        }

2、Set操作

        /// <summary>
        /// 设置key的value
        /// 将键key设定为指定的“字符串”值。
        /// 如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。
        /// 当set命令执行成功之后,之前设置的过期时间都将失效
        /// 原指令:SET key value [EX seconds] [PX milliseconds] [NX|XX]
        /// EX seconds – 设置键key的过期时间,单位时秒
        /// PX milliseconds – 设置键key的过期时间,单位时毫秒 
        /// NX – 只有键key不存在的时候才会设置key的值
        /// XX – 只有键key存在的时候才会设置key的值
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/set.html
        /// </summary>
        public bool Set(string key, string value)
        {
            return Redis.Set<string>(key, value);
        }

        /// <summary>
        /// 设置key的value并设置过期时间
        /// </summary>
        public bool Set(string key, string value, DateTime dt)
        {
            return Redis.Set<string>(key, value, dt);
        }

        /// <summary>
        /// 设置key的value并设置过期时间
        /// </summary>
        public bool Set(string key, string value, TimeSpan sp)
        {
            return Redis.Set<string>(key, value, sp);
        }
        /// <summary>
        /// 设置多个key/value
        /// </summary>
        public void Set(Dictionary<string, string> dic)
        {
            Redis.SetAll(dic);
        }

        /// <summary>
        /// 如果不存在则写入,true,如果存在则不写入返回false
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetValueIfNotExists(string key, string value)
        {
            return Redis.SetValueIfNotExists(key, value);
        }

        /// <summary>
        /// 如果存在则写入,true,如果不存在则不写入返回false
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetValueIfExists(string key, string value)
        {
            return Redis.SetValueIfExists(key, value);
        }

        /// <summary>
        /// 设置多个key/value
        /// key和value值数量不一致会报错
        /// 对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样。
        /// MSET是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。
        /// 时间复杂度:O(N)
        /// 参考:http://www.redis.cn/commands/mset.html
        /// </summary>
        /// <param name="keys"></param>
        /// <param name="values"></param>
        public void Set(List<string> keys, List<string> values)
        {
            Redis.SetAll(keys, values);
        }

3、GET 操作

        /// <summary>
        /// 返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。
        /// 原指令:GET key
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/get.html
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public String Get(string key)
        {
            return Redis.GetValue(key);
        }

        /// <summary>
        /// 获取多个key的value值
        /// 只返回Key存在的值,如果key不存在 也不会返回
        /// 如:keys[A,B,C] 如果keys:B不存在,则返回值value[A值,C值]
        /// 返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败。
        /// 时间复杂度:O(N)
        /// 参考:http://www.redis.cn/commands/mget.html
        /// </summary>
        public List<string> Get(List<string> keys)
        {
            return Redis.GetValues(keys);
        }

        /// <summary>
        /// 获取多个key的value值
        /// 只返回Key存在的值,如果key不存在 也不会返回
        /// 如:keys[A,B,C] 如果keys:B不存在,则返回值value[A值,C值]
        /// </summary>
        public List<T> Get<T>(List<string> keys)
        {
            return Redis.GetValues<T>(keys);
        }

        /// <summary>
        /// 自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。
        /// GETSET可以和INCR一起使用实现支持重置的计数功能。
        /// 举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,
        /// 但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通过GETSET mycounter “0”来实现:
        /// 原指令:GETSET key value
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/getset.html
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public String GetSet(string key, string value)
        {
            return Redis.GetAndSetValue(key, value);
        }

        /// <summary>
        /// 根据Key获取值的长度
        /// </summary>
        public long GetCount(string key)
        {
            return Redis.GetStringCount(key);
        }

        /// <summary>
        /// 获取所有的key
        /// </summary>
        /// <returns></returns>
        public List<string> GetAllKeys()
        {
            return Redis.GetAllKeys();
        }

        /// <summary>
        /// 删除key
        /// 同HashAPI中的Remove
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Remove(string key)
        {
            return Redis.Remove(key);
        }

        /// <summary>
        /// 删除指定的Key
        /// 同HashAPI中的RemoveAll
        /// </summary>
        /// <param name="keys"></param>
        public void RemoveAll(IEnumerable<string> keys)
        {
            Redis.RemoveAll(keys);
        }

4、Incr 加操作

        /// <summary>
        /// 对存储在指定key的数值执行原子的加1操作。
        /// 如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。
        /// 如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,
        /// 那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。
        /// 这个操作仅限于64位的有符号整型数据。
        /// 原指令:INCR key
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/incr.html
        /// 应用:计数器\限速器
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public long Incr(string key)
        {
            return Redis.IncrementValue(key);
        }

        /// <summary>
        /// 将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。
        /// 这个操作最多支持64位有符号的正型数字。
        /// 原指令:INCRBY key increment
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/incrby.html
        /// </summary>
        /// <param name="key"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public long IncrBy(string key, int count)
        {
            return Redis.IncrementValueBy(key, count);
        }

        /// <summary>
        /// 通过指定浮点数key来增长浮点数(存放于string中)的值. 当键不存在时,先将其值设为0再操作.下面任一情况都会返回错误:
        /// key 包含非法值(不是一个string).
        /// 当前的key或者相加后的值不能解析为一个双精度的浮点值.(超出精度范围了)
        /// 如果操作命令成功, 相加后的值将替换原值存储在对应的键值上, 并以string的类型返回. 
        /// string中已存的值或者相加参数可以任意选用指数符号,但相加计算的结果会以科学计数法的格式存储. 
        /// 无论各计算的内部精度如何, 输出精度都固定为小数点后17位.
        /// 原指令:INCRBY key increment
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/incrbyfloat.html
        /// </summary>
        /// <param name="key"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public double IncrByFloat(string key, double count)
        {
            return Redis.IncrementValueBy(key, count);
        }

5、Decr 减操作

        /// <summary>
        /// 自减操作,减小之后的value
        /// 对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。
        /// 如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
        /// 原指令:DECR key
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/decr.html
        /// </summary>
        /// <param name="key"></param>
        public long Decr(string key)
        {
            return Redis.DecrementValue(key);
        }

        /// <summary>
        /// 减count操作,减小之后的value
        /// 将key对应的数字减count。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。
        /// 这个操作最多支持64位有符号的正型数字。
        /// 原指令:DECR key
        /// 时间复杂度:O(1)
        /// 参考:http://www.redis.cn/commands/decrby.html
        /// </summary>
        /// <param name="key"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public long DecrBy(string key, int count)
        {
            return Redis.DecrementValueBy(key, count);
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值