一 .Redis常用的数据类型
- String:最基本的数据类型,二进制安全。
就是我们常用的key-value键值对,值最大能存储512M。
String是二进制安全的表示,Redis的String可以包含任何数据,如jpg图片,或者序列化文件。
(1)如使用命令set name "kimtian" 给name字段赋值kimtian。
使用 get name 命令获取name的值。
再次给name字段赋值为tianjinjiang。
再次使用get name获取name值,可以看到name值变更了
(2)也可以是数字。
如使用命令set count 1 给count赋值为1。
使用get count命令获取count值。
使用incr count 命令给count值加1。
再次使用get count命令获取count值,可以看到该值被加1,变为了2。
(3) redis的单个操作都是原子性的,原子性的意思就是一个事务是一个不可分割的最小工作单位。事务中包含的诸多操作,要么都做,要么都不做。redis命令的原子性,使得我们不用考虑并发问题,可以方便的利用原子性自增操作incr,来实现简单的计数功能,结合上面的incr能够满足计数器的需要。
(4)redis的String是可以包含任何数据的,如jpg图片、序列化的对象等等。redis的String类型之所以支持存储如此多的数据类型,离不开其底层的简单动态字符串sds。
其中buf数组是用来存储内容的;len是用来存储buf已使用的空间的;free是用来记录buf的剩余的空间。
- Hash:String元素组成的字典,适合用于存储对象。
如使用hmset给tianjinjiang赋值name "kimtian" age 25 sex "girl"
可以使用hget tianjinjiang name/age/sex 分别获取其各个属性的值。
redis的hash和平时的实体类很相似,有属性,并且可以通过getter或setter去获取或者给属性赋值。如我们平时用的json,使用redis的Hash用来存储则十分合适。
- List:列表,按照String元素插入顺序排序。可以添加一个元素到列表的头部即左边,也可以添加一个元素到列表的尾部,即右边。
先往mylist里面放入aaa、bbb、ccc三个值,再使用 lrange mylist 1 10来取出第0-10个数据,不够十个则取出所有。
可以看出这个list是后进先出的,类似于栈。 和刚才的映射表类似,大约能存储40亿个成员。
可以用来实现最新消息排行榜等功能,越新的消息排的越靠前。
- Set:String元素组成的无序集合,通过hash表可以实现,不允许重复。添加、删除、查找的复杂度都是O(1)。
通过sadd去添加一个String元素到set中,如果添加成功则返回1,如果已经存在则返回0。
使用smembers指令,可以查看set中的元素,可以看到虽然添加了两次111,但根据集合内元素的唯一性,第二次插入的元素将被忽略,实际集合中只有一个111。
同时set内的数据是无序的。redis为集合提供了求交集、并集、差集等操作。如将粉丝等放入一个集合中,就可以非常方便的实现共同关注,共同爱好等功能。
- Sorted Set:通过分数来为集合中的成员进行从小到大的排序。和Set一样,不允许重复成员 。
每个元素都会关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序。
zset中的成员是唯一的,但分数是可以重复的。
如图所示我们abf不可以添加第二次,第二次添加返回0。但分数同为1的两个数是可以插入的。
分数越小,越往前排。可以使用zrangebyscore mzset 0 10可以按照分数将zset中的值进行排序。
实际应用:如将学生的学号和成绩插入zset中,就已经根据分数进行了天然的排序。
- 用来计数的HyperLogLog,用于支持存储地理位置信息的Geo。