一、Redis简介
Redis(REmote DIctionary Service),常被称为数据结构服务器,也是一个高性能的key-value数据库。
Redis与其他的key-value缓存产品有以下三个区别:
1、Redis支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载到内存中使用。
2、Redis不仅仅支持key-value类型的数据,还提供了list、set、zset、hash等数据结构的存储。
3、Redis支持数据的备份,即master-slave模型的数据备份。
4、Redis是单线程的,通过多路复用提高处理效率。
Redis的优势:
1、性能极高,读速度能达到110000次/s,写速度达到81000次/s
2、丰富的数据类型
3、操作的原子性,要么成功执行,要么失败不执行
4、丰富的特性。Redis还支持publish/subscribe、通知、key过期等特性。
二、Redis基本命令
2.1 连接本地Redis服务器
$ redis-cli
127.0.0.1:6379>
2.2 连接远程Redis服务器
$ redis-cli -h host -p port -a password
2.3 Redis key命令
命令 |
说明 |
DEL key |
删除key |
RENAME key newkey |
重命名key为newkey |
RENAMENX key newkey |
仅当newkey不存在时,将key重命名为newkey |
EXISTS key |
检查key是否存在 |
TYPE key |
返回key所存储的值的类型 |
EXPIRE key seconds |
设置key的过期时间,单位为秒 |
PEXPIRE key milliseconds |
设置key的过期时间,单位为毫秒 |
EXPIREAT key timestamp |
设置key的过期时间,timestamp为Unix时间戳 |
KEYS pattern |
查找所有符合给定模式pattern的key |
MOVE key db |
将当前数据库的key移到给定db |
2.4 Redis字符串命令
命令 |
说明 |
SET key value |
设置key的值 |
GET key |
获取key的值 |
GETRANGE key start end |
返回key中字符串值的子字符串 |
MGET key1 [key2...] |
返回给定的一个或多个key的值 |
STRLEN key |
返回key所存储的字符串值的长度 |
APPEND key value |
如果key已经存在,则将value追加到该key原来的值后面 |
2.5 Redis hash命令
命令 |
说明 |
HMSET key field1 value1 [field2 value2...] |
同时将多个field-value值设置到哈希表key中 |
HSET key field value |
将哈希表key中的字段field的值设置为value |
HMGET key field1 [field2...] |
获取所给定(一个或多个)字段的值 |
HGET key field1 |
获取所给定字段的值 |
HGETALL key |
获取哈希表key的所有字段和值 |
HKEYS key |
获取哈希表key的所有字段 |
HVALS key |
获取哈希表key中的所有值 |
HLEN key |
获取哈希表key的字段数量 |
2.6 Redis list命令
命令 |
说明 |
LPUSH key value1 [value2...] |
将一个或多个值插入到列表头部 |
LPUSHX key value |
将一个值插入到已存在列表的头部 |
LPOP key |
移除并返回列表的第一个元素 |
RPOP key |
移除并返回列表的最后一个元素 |
LRANGE key start end |
返回列表指定范围内的元素 |
LINDEX key index |
通过索引获取列表中的元素 |
LLEN key |
返回列表的长度 |
LREM key count value |
移除列表中的元素。注:count>0表示从表头向表尾搜索,移除与value相等的元素,数量为count;count<0表示从表尾向表头搜索,移除与value相等的元素,数量为count的绝对值;count=0表示移除所有与value相等的元素
|
LSET key index value |
通过索引设置列表元素的值 |
LTRIM key start end |
对列表进行修剪,即只保留指定区间内的元素,不在指定区间内的删除 |
2.7 Redis set命令
命令 |
说明 |
SADD key member1 [member2...] |
向集合添加一个或多个成员 |
SREM key member1 [member2...] |
移除集合中一个或多个成员 |
SCARD key |
获取集合的成员数 |
SMEMBERS key |
返回集合中的所有成员 |
SDIFF key1 key2 |
返回key1与key2的差异 |
SINTER key1 [key2...] |
返回给定集合间的交集 |
SUNION key1 [key2...] |
返回给定集合的并集 |
SPOP key |
移除并返回集合中随机的一个成员 |
2.8 Redis zset命令
命令 |
说明 |
ZADD key score1 member1 [score2 member2...] |
向有序集合添加一个或多个成员,或者更新已存在的成员的分数 |
ZRANGE key start end [WITHSCORES] |
通过索引区间返回指定区间内的成员 |
ZCARD key |
返回有序集合的成员数 |
ZCOUNT key min max |
统计有序集合指定区间分数内的成员数 |
ZLEXCOUNT key min max |
统计有序集合指定字典区间内的成员数,与上一个不同的是,上一个是指定分数,这个是指定字典 |
ZRANGEBYLEX key min max |
通过字典区间返回有序集合的成员 |
ZRANGEBYSCORE key min max |
通过分数区间返回有序集合的成员 |
127.0.0.1:6379> zrange azset 0 10 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "f"
10) "0"
11) "g"
12) "0"
13) "h"
14) "0"
127.0.0.1:6379> zcount azset 0 10
(integer) 7
127.0.0.1:6379> zlexcount azset 0 10
(error) ERR min or max not valid string range item
127.0.0.1:6379> zlexcount azset [a [f
(integer) 5
三、Redis事务
Redis单个命令操作是原子性的,但是事务操作并不是原子性的,事务中的某个命令执行失败并不会回滚之前已执行的,也不会影响后续即将要执行的命令。
Redis以MULTI开始一个事务,然后将多个命令入队到事务中,最后以EXEC命令触发事务,一并执行队列中的所有命令。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set book_name "Master Python in 21 days"
QUEUED
127.0.0.1:6379> get book_name
QUEUED
127.0.0.1:6379> sadd tag "Python" "Programming" "Mastering Series"
QUEUED
127.0.0.1:6379> smembers tag
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) "Master Python in 21 days"
3) (integer) 3
4) 1) "Programming"
2) "Python"
3) "Mastering Series"
127.0.0.1:6379>
四、Redis的应用场景
1、缓存。这是Redis最常用的场景。Redis是基于内存的数据存储器,有着优异的数据读写性能。
2、计数器。Redis提供的INCR命令来实现计数器的功能,内存操作,性能非常好。
3、分布式会话。在应用较多的复杂的集群系统中,一般会搭建以Redis等内存数据库为中心的session服务,来管理session。
4、分布式锁。Redis单线程的这个特性,非常适合用作分布式锁
5、排行榜。Redis提供的有序集合数据结构能实现各种复杂的排行榜功能。
6、社交网络。Redis提供的哈希、集合等数据结构能较好地处理诸如点赞、关注、被关注、共同好友等社交网络的需求。
7、最新列表。Redis的列表结构,LTRIM可以控制列表的长度。
8、消息系统。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统,不过这个不能和专业的消息队列中间件相比。
网友评论