Redis中一共包含五中数据类型,下面就让我们一块认识下:
一、String
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
常用的set命令有:
1.set
设置key对应的值为string类型的value;
2.setnx
设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思。
3.setex
设置key对应的值为string类型的value,并指定此键值对应的有效期。
4.setrange
设置指定key的value值得子字符串
5.mset
一次设置多个key的值,成功返回ok,表示所有的值都设置了,失败返回0表示没有任何值被设置。
6.msetnx
一次可以设置多个key的值,但是不会覆盖已经存在的key
常用的get命令:
1.get
获得key值
2.getset
获取旧值,设置新值
3.getrangge
获取key的value值的子字符串
4.mget
一次获取多个key的值,如果对应key不存在则对应返回nil
常用的key命令:
1.incr
对key的值做加加操作,并返回新的值;
2.incrby
通incr类似,加指定值,key不存在的时候会设置key,并认为原来的value是0
二、hash类型
Redis中hash是一个string类型的field和value的映射表,特别适合用于存储对象,相比较对象的每个字段存成单个string类型,将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
三、list类型
List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。
四、set类型
set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集合。
五、Sorted set
Sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为两列MySQL表,一列存value,一列存顺序。操作中key理解为zset的名字。
对比:
Redis中的数据类型设计和java中的集合是一样的,主要是为了方便我们存储不同的数据。Hash类型适合存储对象,hash的内部实现就是一个HashMap,我们在读取数据时通过key值+filed(属性)就可以读到我们想要的数据;对于list而言,它是有序的,可以通过索引获取我们想要的数据;最后的set,它是一个无序集合,其实内部实现就是一个value值永远为null的HashMap.
理论永远要和实践结合起来,redis中的list、set、hash和我们之前在java中学习过的list、set和map设计的性质是非常相似的,可以结合一起学习。具体的应用场景在此就不再举例了。