Redis全称为REmote DIctionary Server,是一个key-value存储系统。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
1.Redis的优点
(1)性能极高
Redis能读的速度是110000次/s,写的速度是81000次/s 。
(2)丰富的数据类型
Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
(3)原子
Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
(4)丰富的特性
Redis还支持 publish/subscribe, 通知, key 过期等等特性。
2.Redis 数据类型
(1)String(字符串)
![](https://img.haomeiwen.com/i16516131/a4df0bde90104e9b.png)
使用set key xx来设置key的值,get key来得到key的值
(2)Hash(哈希)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
![](https://img.haomeiwen.com/i16516131/52200b0a16d1f73b.png)
设置key的值
hmset key的值 field1 xx1 field2 xx2
得到key的值
hget key的值 field1
(3) List(列表)
![](https://img.haomeiwen.com/i16516131/dbf6fa7f85d0979c.png)
设置key的值
使用lpush key的值 xx
得到key的值
lrange key的值 开始的index 结束的index
(4) Set(集合)
Redis 的 Set 是 string 类型的无序集合
![](https://img.haomeiwen.com/i16516131/0990f8fc40685c83.png)
设置key的值
sadd key的值 xx
得到key的值
smembers key的值
(5)zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
![](https://img.haomeiwen.com/i16516131/d631d943de9eb6d9.png)
设置key的值
zadd key的值 0 xxx
得到key的值
zrangebyscore key的值 开始的index 结束的index
3. Redis命令
Redis字符串命令
(1)连接本地redis服务
redis-cli
(2)检测redis服务是否启动
ping
(3)连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
(4)删除键值
DEL runoobkey
(5)序列化给定 key ,并返回被序列化的值
DUMP KEY_NAME
(6)检查给定 key 是否存在
EXISTS KEY_NAME
(7)给key设置过期时间
EXPIRE mykey 60
mykey 设置了过期时间为 1 分钟,1分钟后该键会自动删除。
EXPIREAT mykey 1293840000
以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用
(8)获取 redis 中所有的 key
KEYS *
(9)将 key 移动到数据库 1
MOVE key 1
(10)返回 key 所储存的值的类型
![](https://img.haomeiwen.com/i16516131/024cd1b1a34805f1.png)
(11)获取指定 key 所储存的字符串值的长度
![](https://img.haomeiwen.com/i16516131/945efbf1fc34f74c.png)
(12)同时设置一个或多个 key-value 对
MSET key1 "Hello" key2 "World"
![](https://img.haomeiwen.com/i16516131/16e1ad920ead5ac6.png)
Redis 哈希(Hash)命令
(1)删除哈希表 key 中的一个或多个指定字段
HDEL myhash field1
![](https://img.haomeiwen.com/i16516131/cc2a3205de2bb1fd.png)
(2)查看哈希表的指定字段是否存在
HEXISTS myhash field1
![](https://img.haomeiwen.com/i16516131/22c51bb383b7f862.png)
(3)返回哈希表中指定字段的值
HGET site redis
![](https://img.haomeiwen.com/i16516131/bf487d2580711f2b.png)
(4)返回哈希表中,所有的字段和值
HGETALL myhash
![](https://img.haomeiwen.com/i16516131/0bd3849ebbb753b0.png)
(5)获取哈希表中的所有域(field)
HKEYS key
![](https://img.haomeiwen.com/i16516131/be188fab0d890101.png)
(6)获取哈希表中字段的数量
HLEN myhash
![](https://img.haomeiwen.com/i16516131/84e1d6f13bc88e57.png)
Redis 列表(List)命令
(1)通过索引获取列表中的元素
可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素
LINDEX mylist 0
![](https://img.haomeiwen.com/i16516131/7796653564ff850f.png)
(2)返回列表的长度
LLEN list1
![](https://img.haomeiwen.com/i16516131/f72368a756267e6d.png)
(3)Lpush 命令将一个或多个值插入到列表头部
LPUSH list1 "foo"
![](https://img.haomeiwen.com/i16516131/5ab347ec21c18988.png)
(4)Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)
RPUSH mylist "foo"
![](https://img.haomeiwen.com/i16516131/e18be7eebefefc53.png)
Redis 集合(Set)命令
(1)Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
SADD myset "hello"
![](https://img.haomeiwen.com/i16516131/41aed9d89d53c4fd.png)
(2)Scard 命令返回集合中元素的数量
SCARD myset
![](https://img.haomeiwen.com/i16516131/8dce373ad37b91e9.png)
(3)Smembers 命令返回集合中的所有的成员,不存在的集合 key 被视为空集合
SMEMBERS myset1
![](https://img.haomeiwen.com/i16516131/d31c2f485b4f2191.png)
(4)Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合
SMOVE myset1 myset2 "bar"
![](https://img.haomeiwen.com/i16516131/91b7fcec1e66e8e1.png)
Redis 有序集合(sorted set)
(1)Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中
ZADD myzset 1 "one"
![](https://img.haomeiwen.com/i16516131/10d0655b7c7f0fee.png)
(2)Zcard 命令用于计算集合中元素的数量
ZCARD myzset
![](https://img.haomeiwen.com/i16516131/9600873b4f9c06de.png)
(3)Zscore 命令返回有序集中,成员的分数值,如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil
ZSCORE salary peter
![](https://img.haomeiwen.com/i16516131/dd43bff7afcab58d.png)
4.Redis 事务
事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务
先以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务
![](https://img.haomeiwen.com/i16516131/2293695c114f0838.png)
事务命令:
(1)Discard 命令用于取消事务,放弃执行事务块内的所有命令
![](https://img.haomeiwen.com/i16516131/4ba37875b7dc74d4.png)
(2)Watch 命令用于监视一个(或多个) key
![](https://img.haomeiwen.com/i16516131/97cf1141539e87cf.png)
(3)Unwatch 命令用于取消 WATCH 命令对所有 key 的监视
![](https://img.haomeiwen.com/i16516131/8db1809b49382b2f.png)
5. Redis 连接
(1)Auth 命令用于检测给定的密码和配置文件中的密码是否相符
![](https://img.haomeiwen.com/i16516131/257695b49479cbd1.png)
(2)Echo 命令用于打印给定的字符串
![](https://img.haomeiwen.com/i16516131/3633aa7af7418df5.png)
(3)Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG
![](https://img.haomeiwen.com/i16516131/9db60e13ba910f2c.png)
(4)Quit 命令用于关闭与当前客户端与redis服务的连接
![](https://img.haomeiwen.com/i16516131/d04d45c29dbd0db4.png)
(5)Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值
![](https://img.haomeiwen.com/i16516131/7ea11acdb8d9b349.png)
6. Redis 服务器
(1) Client Slots 命令用于当前的集群状态,以数组形式展示
![](https://img.haomeiwen.com/i16516131/c9f6e68b81885b2e.png)
(2) Time 命令用于返回当前服务器时间
![](https://img.haomeiwen.com/i16516131/df270ffb82d8befb.png)
(3) Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )
![](https://img.haomeiwen.com/i16516131/f0b3089b93574059.png)
(4) Flushdb 命令用于清空当前数据库中的所有 key
![](https://img.haomeiwen.com/i16516131/0c1dfc966b0c3792.png)
7. Redis 数据备份与恢复
(1) SAVE 命令用于创建当前数据库的备份
![](https://img.haomeiwen.com/i16516131/de120c6b2840cb6a.png)
(2)如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可,获取 redis 目录可以使用 CONFIG 命令,如下所示:
![](https://img.haomeiwen.com/i16516131/cd4d6ca5072229dc.png)
网友评论