复述,数据类型及应用场景知识点总结

  

<强>复述,数据类型及应用场景

  

复述,支持5种数据类型:字符串(字符串),散列(哈希),列表(列表),设置集(合)及zset(排序设置:有序集合)。

  

<强>一、字符串

  

简介:字符串数据类型是最常用,简单的键值类型,普通的键/值存储都可以归为此类value不仅可以是字符串,也可以是数字。因为是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储.Redis的字符串可以完全实现目前memcached的功能,并且效率更高。除了提供与memcached一样的,集,增加,12月等操作外,复述,还额外提供了下面一些操作:

  

1。获取字符串长度

  

2。往字符串附加内容

  

3。设置和获取字符串的某一段内容

  

4。设置及获取字符串的某一位(比特)

  

5。批量设置一系列字符串的内容

  

常用命令:集,12月,增加,mget等。

  

应用场景:

  

1。应用Memcached和CKV的所有场景。字符串和数字直接存取。结构化数据需要先序列化,再到价值;相应的,获取到值后需要反序列化。

  

2。可以利用复述的增加,INCRBY, 12月,DECRBY等指令来实现原子计数的效果。即可以用来实现业务上的统计计数需求。也可用于实现idmaker,即生成全局唯一的id。

  

3。存放会话密钥,实现一个分布式会话系统.Redis的关键可以方便地设置过期时间,用于实现会话密钥的自动过期。验证skey时先根据uid路由到对应的复述,如取不到skey,则表示skey已过期,需要重新登录,如取到skey且校验通过则升级此skey的过期时间即可。

  

4。设置nx或SetNx,仅当关键不存在时才设置。可以用来选举主或实现分布式锁:所有客户不断尝试使用SetNx大师的名字抢注主人,成功的那位不断使用到期刷新它的过期时间。如果大师挂掉了钥匙就会失效,剩下的节点又会发生新一轮抢夺。

  

5。借助redis2.6开始支持的lua脚本,可以实现更安全的2种分布式锁:一种适用于各进程竞争但总是单个进程获取锁并处理的场景。除非原处理进程挂掉因而锁过期才会被其它进程获取到锁。无须主动解锁。通过,过期/pexpire setnx前| px的lua脚本实现;一种适用于各进程竞争获取锁并处理的场景。通过设置nx前| px获取锁,用完需要通过先得到判断再del释放锁,否则在锁过期之前不能获取到锁。

  

6。GetSet,设置新值,返回旧值,比如实现一个计数器,可以用GetSet获取计数并重置为0。

  

7。GetBit/SetBit/BitOp/BitCount,位图的玩法,比如统计今天的独立访问用户数时,每个注册用户都有一个偏移量,他今天进来的话就把他那个位设为1,用BitCount就可以得出今天的总人数。

  

8。附加/SetRange/GetRange/函数对文本进行扩展,替换,截取和求长度,对特定数据格式非常有用。

  

实现方式:字符串在复述,内部存储默认就是一个字符串,被redisObject所引用,当遇到增加,12月等操作时会转成数值型进行计算,此时redisObject的编码字段为int。

  

<强>二、散列

  

简介:散列存的是字符串和字符串值之间的映射.Hash将对象的各个属性存入地图里,可以只读?更新对象的某些属性。这样有些属性超长就让它一边呆着不动,另外不同的模块可以只更新自己关心的属性而不会互相并发导致覆盖冲突。

  

常用命令:hget hset, hgetall等。

  

应用场景:

  

1。存放结构化数据,比如用户信息。在Memcached或CKV中,对于用户信息比如用户的昵称,年龄,性别,积分等,我们需要先序列化后存储为一个字符串的值,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而复述的散列结构可以使你像在数据库中更新一个属性一样只修改某一项属性值。如下图:

  

2。关键是用户ID,价值是一个地图,这个映射的键是成员的属性名,值是属性值,这样对数据的修改和存取都可以直接通过其内部映射的键(复述里称内部映射的键为字段),也就是通过关键(用户ID) +字段(属性标签)就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。

  

3。不过这里需要注意,复述,提供了接口(hgetall)可以直接取到全部的属性数据,但是如果内部地图的成员很多,那么涉及到遍历整个内部地图的操作,由于复述,单线程模型的缘,故这个遍历操作可能会比较耗时,而对其它客户端的请求完全不响应,这点需要格外注意。

复述,数据类型及应用场景知识点总结