Redis,一种高性能的key-value数据库,并提供多种语言的API。它通常称为数据结构服务器,因为值可以是字符串,哈希,列表,集合和有序集合等类型。
redis特点:
- Redis支持数据的格式化,可以将内存中的数据保存在磁盘中,重启的时候可以加载进行使用。
- Redis不仅仅支持key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
- 性能极高
- 所有操作都是原子操作,要么全成功,要不不成功。支持事物。
Redis数据类型:
Redis支持五种数据类型:string,hash,list,set和zset(sorted set,有序集合)。
string型:string类型是二进制安全的,可以包含任何数据,比如jpg图片或序列化的对象。一个键最大能存储512M。一般做一些复杂的计数功能的缓存。
Hash:是一个string类型的field和value的映射表,hash特别适合用于存储对象。每个hash可以存储2^32-1个键值对(40亿)。这里的value存放的是结构化对象,比较方便的就是操作其中的某个字段。当做单点登录的时候,就是用这种数据结构存储用户信息。以cookieid作为key,设置30分钟为缓存过期时间,模拟session效果
127.0.0.1:6379> hmset myfamily yaohuiqin girlfriend weixihui boyfriend OK 127.0.0.1:6379> hget myfamily yaohuiqin "girlfriend" 127.0.0.1:6379> hget myfamily weixihui "boyfriend"
List(列表):列表是简单的字符串列表,按照插入顺序排序。列表最多可以存储2^32-1个元素(40亿)。使用List的数据结构,可以做简单的消息队列的功能。利用lrange命令,做基于redis的分页功能,效果极佳。
127.0.0.1:6379> lpush bigfamily yaohuiqin (integer) 1 127.0.0.1:6379> lpush bigfamily yaohuiqin (integer) 2 127.0.0.1:6379> lpush bigfamily weixihui (integer) 3 127.0.0.1:6379> lpush bigfamily mama (integer) 4 127.0.0.1:6379> lpush bigfamily baba (integer) 5 127.0.0.1:6379> lrange bigfamily 0 10 1) "baba" 2) "mama" 3) "weixihui" 4) "yaohuiqin" 5) "yaohuiqin"
Set:是string类型的无序不重复集合,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。set堆放的是一堆不重复的集合,所以可以做局部去重功能。利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能
127.0.0.1:6379> sadd setfamily yaohuiqin (integer) 1 127.0.0.1:6379> sadd setfamily weixihui (integer) 1 127.0.0.1:6379> sadd setfamily mama (integer) 1 127.0.0.1:6379> sadd setfamily baba (integer) 1 127.0.0.1:6379> sadd setfamily didi (integer) 1 127.0.0.1:6379> sadd setfamily yaohuiqin (integer) 0 127.0.0.1:6379> sadd setfamily weixihui (integer) 0 127.0.0.1:6379> smembers setfamily 1) "weixihui" 2) "yaohuiqin" 3) "mama" 4) "baba" 5) "didi"
zset:有序集合,string元素的类型集合,不允许有重复。不同的元素都会关联一个double类型的分数。redis正式通过分数来对集合中的成员进行从小到大的排序。注意,zset的成员唯一,但是分数可以重复。多了一个权重参数score,集合中的元素能够按照score进行排序,可以做排行榜应用,取TOP N操作。
127.0.0.1:6379> zadd zsetfamily 0 yaohuiqin (integer) 1 127.0.0.1:6379> zadd zsetfamily 2 weixihui (integer) 1 127.0.0.1:6379> zadd zsetfamily 3 baba (integer) 1 127.0.0.1:6379> zadd zsetfamily 0 mama (integer) 1 127.0.0.1:6379> zrangebyscore zsetfamily 0 100 1) "mama" 2) "yaohuiqin" 3) "weixihui" 4) "baba"