1. 启动Redis客户端
- 使用Dokcer启动
# 拉取镜像
docker pull redis
# 启动容器
docker run -p 6379:6379 -d redis redis-server --appendonly yes
# 查看容器id
# docker ps
# 进入容器
# docker exec -it 8a7ba84f925e bash
- Ubuntu安装与启动
# 安装
apt updata
apt install redis-server
# 查看是否启动成功
redis-server
2. 连接Redis
redis-cli -h host -p port
# 连接成功后,有设置密码则需要验证密码
auth password
redis-cli -h 127.0.0.1 -p 6379
auth admin123
Dokcer启动的话也可以在宿主机外进行连接
先使用ifconfig查看docker的ip地址
我这边查到的地址是172.17.0.1
redis-cli -h 172.17.0.1 -p 6379
3. Redis字符串(String)
# 设置指定key的值
set key value
# 获取指定key的值
get key
# 将key所存储数字值增1(非数字会报错)
incr key
# 将key所存储数字值减1(非数字会报错)
decr key
# 返回key所存储的字符串值的长度
strlen key
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> get age
"1"
127.0.0.1:6379> incr age
(integer) 2
127.0.0.1:6379> get age
"2"
127.0.0.1:6379> decr age
(integer) 1
4. Redis哈希(Hash)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
# 同时将多个field-value(域-值)对设置到哈希表key中
hmset key field1 value1 [field2 value2]
# 将哈希表key中的字段field设为value
hset key field value
# 删除一个或多个哈希字段
hdel key field1 [field2]
# 查看哈希表key中,指定的字段是否存在
hexists key field
# 查看哈希表key中指定字段的value值
hget key field
# 查看哈希表key中所有的字段和值
hgetall key
# 查看哈希表中的字段
hkeys key
# 查看哈希表所有值
hvals key
127.0.0.1:6379> hmset jack sex male age 17 likes 1
OK
127.0.0.1:6379> hgetall jack
1) "sex"
2) "male"
3) "age"
4) "17"
5) "likes"
6) "1"
127.0.0.1:6379> hget jack sex
"male"
127.0.0.1:6379> hdel jack sex
(integer) 1
127.0.0.1:6379> hexists jack sex
(integer) 0
127.0.0.1:6379> hkeys jack
1) "age"
2) "likes"
127.0.0.1:6379> hvals jack
1) "17"
2) "1"
127.0.0.1:6379> hsetnx jack sex male
(integer) 1
5. Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
# 将一个或多个值插入列表头部
lpush key value1 [value2]
# 将一个或多个值插入列表尾部(最右边)
rpush key value1 [value2]
# 移除并返回列表的第一个元素
lpop key
# 移除并返回列表的最后一个元素
rpop key
# 获取列表长度
llen key
# 通过索引获取列表中的元素(从0开始)
lindex key index
# 获取列表指定范围内的元素
lrange key start stop
172.17.0.1:6379> lpush jack redis
(integer) 1
172.17.0.1:6379> lpush jack mongodb
(integer) 2
172.17.0.1:6379> lrange jack 0 10
1) "mongodb"
2) "redis"
172.17.0.1:6379> rpush jack mysql
(integer) 3
172.17.0.1:6379> lrange jack 0 10
1) "mongodb"
2) "redis"
3) "mysql"
172.17.0.1:6379> llen jack
(integer) 3
172.17.0.1:6379> lpop jack
"mongodb"
6. Redis集合(Set)
Redis 的 Set 是 String 类型的无序集合。
集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
# 向集合添加一个或多个成员
sadd key member1 [member2]
# 获取集合的成员数
scard key
# 返回给定所有集合的差集
sdiff key1 [key2]
# 返回给定所有集合的交集
sinter key1 [key2]
# 返回给定所有集合的并集
sunion key1 [key2]
# 返回集合中的所有成员
smembers key
# 判断member元素是否是集合key的成员
sismember key member
# 移除并返回集合中的一个随机元素
spop key
172.17.0.1:6379> sadd jack redis
(integer) 1
172.17.0.1:6379> sadd jack mongodb
(integer) 1
172.17.0.1:6379> sadd jack mysql
(integer) 1
172.17.0.1:6379> smembers jack
1) "mysql"
2) "mongodb"
3) "redis"
172.17.0.1:6379> scard jack
(integer) 3
172.17.0.1:6379> sismember jack redis
(integer) 1
172.17.0.1:6379> spop jack
"mongodb"
7. Redis有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
# 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zadd key score1 member1 [score2 member2]
# 获取有序集合的成员数
zcard key
# 通过索引区间返回有序集合指定区间内的成员
zrange key start stop [withscores]
# 返回有序集合中指定成员的索引
zrank key member
# 移除有序集合中的一个或多个成员
zrem key member [member ...]
172.17.0.1:6379> zadd jack 1 redis
(integer) 1
172.17.0.1:6379> zadd jack 2 mongodb
(integer) 1
172.17.0.1:6379> zadd jack 3 mysql
(integer) 1
172.17.0.1:6379> zadd jack 3 mysql
(integer) 0
172.17.0.1:6379> zadd jack 4 mysql
(integer) 0
172.17.0.1:6379> zrange jack 0 10 withscores
1) "redis"
2) "1"
3 )"mongodb"
4) "2"
5) "mysql"
6) "4"
8. Redis事务
Redis 事务可以一次执行多个命令,
并且带有以下三个重要的保证:
- 批量操作在发送
EXEC
命令前被放入队列缓存。 - 收到
EXEC
命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 - 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
# 标记一个事务块的开始
MULTI
# 取消事务,放弃执行事务块内的命令
DISCARD
执行所有事务块内的命令
EXEC
# 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
WATCH key [key ...]
# 取消 WATCH 命令对所有 key 的监视。
UNWATCH
先以MULTI
开始一个事务,
然后将多个命令入队到事务中,
最后由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"
9.数据备份与恢复
SAVE
用于创建当前数据库的备份
该命令将在redis安装目录中创建dump.rdb文件
恢复数据,只需要将备份文件(dump.rdb)移动到redis安装目录下并启动服务即可
获取redis目录可以使用CONFIG
命令
# 备份数据库
SAVE
# 后台执行备份文件
BGSAVE
# 获取redis安装目录
CONFIG GET dir
redis 127.0.0.1:6379> SAVE
OK
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
10. Redis安全
我们可以通过 redis 的配置文件设置密码参数,
这样客户端连接到 redis 服务就需要密码验证,
这样可以让你的 redis 服务更安全。
# 查看是否设置了密码验证
CONFIG get requirepass
# 修改密码requirepass参数
CONFIG set requirepass
# 验证密码(设置密码后需要验证密码才能操作数据库)
AUTH password
11. Redis管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。
这意味着通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
- 服务端处理命令,并将结果返回给客户端。
Redis 管道技术可以在服务端未响应时,
客户端可以继续向服务端发送请求,
并最终一次性读取所有服务端的响应。
管道技术最显著的优势是提高了 redis 服务的性能。
网友评论