一、Redis介绍
Redis全称(Remote Dictionary Server)本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。Redis默认16个数据库,类似数组下标从0开始,初始默认使用0号库。Redis底层是Redis是单线程+多路IO复用技术。
二、Redis的数据类型
1.string类型
1)String是Redis最基本的类型,一个key对应一个value。
2)String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
3)String类型value最多可以是512M。
例子
mset <key1> <value1> <key2> <value2> .....
同时设置一个或多个 key-value对
2.list类型
1)Redis的List是单键多值的。
2)Redis 的List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
3)Redis的List它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
例子
lpush/rpush <key> <value1> <value2> <value3> ....
从左边/右边插入一个或多个值。
3.set类型
1)Redis的set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
2)Redis的set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
例子
sadd <key> <value1> <value2> .....
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
4.hash类型
1)Redis的hash 是一个键值对集合。
2)Redis的hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
3)Redis的hash类似Java里面的Map<String,String>
例子
hset <key> <field> <value>
给<key>集合中的 <field>键赋值<value>
5.zset类型
1)Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
2)因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
例子
zadd <key> <score1> <value1> <score2> <value2>...
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。