Redis数据库的使用
Redis是一个高性能的key-value数据库,并且有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Ubuntu安装Redis:
$sudo apt-get update
$sudo apt-get install redis-server
$ redis-server
查看是否启动: $ redis-cli
使用Redis客户端:
$ redis-cli
如果在远程服务上启动Redis客户端:
$ redis-cli -h host -p port -a password
有时候会有中文乱码,只需要redis-cli后面加上--raw
Redis的数据类型
Redis支持五种数据类型:string,hash,list,set(集合),zset(有序集合)
string:
可以包含任何数据,比如图片或者序列化的对象,这个类型最大能储存512MB
redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"
使用set
和get
命令,例子中的name
为变量名
可以使用DEL
命令删除键
Hash:
这是一个键值对集合,特别适合用于存储对象
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
使用HMSET
设置键值对,使用HGET
获取对应的值
List:
Redis列表是简单的字符串列表,按照插入的顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边):
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
例子中runoob
为list的名字,可以存储40多亿数据
Set:
这是String类型的无序集合,集合是通过哈希表实现的,所以增加,删除,查找的复杂度都是O(1):
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq #这里添加第二次,但是集合内元素具有唯一性,所以第二次的插入将被忽略
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "rabitmq"
3) "mongodb"
sadd key member
这里使用sadd
命令将string类型元素添加到key对应的set集合中,成功返回1,元素已存在返回0,set不存在返回错误
zset:
与set不同的是每个元素都会关联一个double类型的分数,然后通过分数为集合中的成员进行从小到大的排序,成员元素不可重复,但是分数可以重复
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"
zadd key score member
使用zadd
命令,将元素添加到集合中,并且更新对应的分数score。
Redis事务:
Redis事务可以一次性执行多个命令,批量操作在发送EXEC命令前放入队列缓存,收到EXEC这个命令后进入事务执行,任意命令执行失败其余的命令依然被执行,在事务执行的过程中其他客户端提交的命令不会插入到事务执行命令的序列中。
例子如下:
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
2) "C++"
3) "Programming"
以MULTI
命令表明开始一个事务,然后添加各种命令,最后由EXEC
命令执行事务中的所有命令
还可以使用DISCARD
命令放弃执行事务块中的所有命令