redis

  转自菜鸟教程

一、简介

redis是一个高性能的key-value的数据库,redis有如下特点:

  • 支持数据持久化,可以将内存中的数据持久化到磁盘中,重启的时候可以继续使用。
  • 不仅支持简单的key-value类型的数据,还支持list、set、zset(sorted set有序集合)、hash等类型数据
  • 支持数据的备份,即master-slave模式的数据备份。

 

redis的所有操作都是原子性的,可以对几个操作合并后的原子性执行,Redis还支持 publish/subscribe, 通知, key 过期等等特性。

 

二、redis数据类型

  1、String字符串

  string是redis最基本数据类型,类似于memcached key=>value式。String类型是二进制安全的,意味着redis的string可以包含任何数据包括jpg图片或者序列化的对象

  string类型是redis最基本的数据类型,一个键最大能存储512M。

  例:

>SET name "test"
OK
>GET name
"test"

  2、Hash(哈希)

  redis hash是键值对集合

  redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

  例:

redis 127.0.0.1:6379> HMSET user:1 username w3cschool.cc password w3cschool.cc points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "w3cschool.cc"
3) "password"
4) "w3cschool.cc"
5) "points"
6) "200"
redis 127.0.0.1:6379>

  实例中我们使用了 Redis HMSET, HGETALL 命令,user:1 为键值。每个 hash 可以存储 232 - 1 键值对(40多亿)。

  3、List(列表)

  Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)

  例:

redis 127.0.0.1:6379> lpush w3cschool.cc redis
(integer) 1
redis 127.0.0.1:6379> lpush w3cschool.cc mongodb
(integer) 2
redis 127.0.0.1:6379> lpush w3cschool.cc rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange w3cschool.cc 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

  列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

  4、Set(集合)

  redis的Set是string类型的无序集合,不允许重复,集合是通过哈希表实现的,所以添加、删除、查找复杂度都是O(1)

  sadd命令将一个string元素添加到key对应的set集合中,成功返回1,如果元素已经在集合中则返回0,key对应的set不存在返回错误

sadd key member

  例:

redis 127.0.0.1:6379> sadd w3cschool.cc redis
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cc mongodb
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cc rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd w3cschool.cc rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers w3cschool.cc

1) "rabitmq"
2) "mongodb"
3) "redis"

  

  注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

  集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

 

  5、zset(有序集合)

  zset与set一样是string类型的集合,不允许重复。不同的是每个元素都会关联double类型的分数。redis正是通过分数来为集合中的成员从小到大排序,zset的成员是唯一的,但分数可以重复

  zadd命令添加元素到集合,元素在集合中存在则更新对应的score

  

zadd key score member 

  例:

redis 127.0.0.1:6379> zadd w3cschool.cc 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cc 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cc 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd w3cschool.cc 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE w3cschool.cc 0 1000

1) "redis"
2) "mongodb"
3) "rabitmq"
posted @ 2016-02-17 16:59  orlion  阅读(485)  评论(0编辑  收藏  举报