1、Redis简介
Redis是一个key-value存储系统,全称为Remote Dictionary Server,即远程字典服务器。和所谓的MySQL和Oracle不一样,它是key/value数据库,支持多种value类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。Redis的出现,很大程度弥补了关系型数据库的不足。它提供了各种常见语言的客户端,使用很方便。
2、Redis数据结构
Redis支持string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)
2.1.1 string
string即字符串类型,本质为byte数组。其值可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。
string类型提供了多种多样的命令可供使用,几乎所有编程语言中string的操作都可以在Redis中找到对应的命令。除了上述命令外,如果string存储的是一个数字的话,还可以直接对该数字执行算术操作命令。
2.1.2 list
列表(list)用来存储多个有序的字符串,列表中的每个字符串称为元素(element),一个列表最多可以存储2^32 -1个元素。
list本质是一个双链表,其支持双链表支持的所有类型操作。list还支持类似数组的区间操作。list可以当做栈和队列使用。同时list还支持阻塞操作。
2.1.3 hash
哈希(hash)类型是指键值本身又是一个键值对结构,value={ {field1,value1},...{fieldN,valueN}}。hash类型特别适合用来保存一些结构化的数据,比如编程语言中的对象。举一个简单的例子,要在redis中存储一个学生的信息,key为这个学生的学号,value={"name":"小明","age":"18","gender":"male"}。需要注意的是,hash的key和value均为string。
在Memcached中,我们经常将一些结构化的信息打包成HashMap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
2.1.4 set
集合(set)就是一堆不重复值的组合,类似于java中的HashSet,用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。
利用set数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并