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"