美文网首页
Redis相关

Redis相关

作者: 鹊南飞_ | 来源:发表于2020-04-29 10:19 被阅读0次

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 服务的性能。

相关文章

  • redis汇总

    redis优化 redis 操作相关 安装Redis redis常用命令

  • Redis与Python的交互

    下载redis数据库相关模块 Redis pip install redis 并且进行导入相关模块 from re...

  • redis使用相关命令

    Redis keys 命令 下表给出了与 Redis 键相关的基本命令: Redis String类型相关命令 R...

  • Ansible-playbook roles安装redis实例(

    1、相关redis参数: 2、/templates/redis.conf配置相关参数: daemonize yes...

  • SpringBoot整合redis——redisTemplate

    SpringBoot整合redis——redisTemplate的使用 加入redis相关依赖 yml redis...

  • Redis

    redis 相关的可执行文件 redis-server Redis服务器 redis-cli ...

  • redis

    阿里云安装redis yum源安装 2.应用程序安装 redis的相关命令 应用程序安装的redis相关命令: 启...

  • redis相关

    1. 使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就...

  • Redis相关

    Redis安装及使用1)下载地址:https://github.com/MSOpenTech/redis/rele...

  • redis相关

    1、centos下登录客户端 -h 代表IP地址-p 代表端口-a 代表密码,如果含有! 、#等特殊字符要在前面加...

网友评论

      本文标题:Redis相关

      本文链接:https://www.haomeiwen.com/subject/tkfgwhtx.html