Redis 入门

一、Redis 介绍


Redis 是完全开源免费的,是一个高性能的 key-value 数据库。


Redis 的特点有:

支持数据持久化,可以将内存中的数据存保存到磁盘中,重启时可以再次加载进行使用。

支持多种数据结构存储,例如:string、list、set、zset、hash。

支持数据的备份,设置 master-slave 模式。

性能极高,读的速度是 110000/s,写的速度是 81000/s。




二、Redis 操作数据类型


1、string:key-value

命令:set key value

作用:赋值

命令:get key

作用:取值


2、hash:哈希

命令:hmset odjName key1 value1 key2 value2

作用:赋值

命令:hmget objName key2

作用:取值

命令:hkeys objName

作用:hash 中的所有 key

命令:hvalues objName

作用:hash 中的所有 value


3、list:无序集合

命令:lpush objName value1 value2 value3

作用:赋值

命令:lrange objName startIndex endIndex

作用:取值


4、set:无序集合(去重复)

命令:sadd objName value1 value2 value3

作用:赋值

命令:smembers objName

作用:取值


5、zset:有序集合(去重复)

命令:zadd objName index1 value1 index2 value2

作用:赋值

命令:zcard objName

作用:查看集合的成员个数

命令:zrange objName startIndex endIndex

作用:取值

命令:zrange objName startIndex endIndex withscores

作用:取值(带索引)

命令:zrank objName value

作用:获取值对应的索引

命令:zrem objName value

作用:删除值




三、Redis 发布与订阅


命令:subscribe channel channel

作用:订阅(可订阅多个)

命令:publish channel message

作用:发布消息




四、Redis 事务


命令:multi

作用:启动事务


启动事务后,执行的命令不是真的执行,当遇到执行事务命令后才是真正的执行。


命令:exec

作用:执行事务




五、Redis 数据的备份与恢复(持久化)


1、手动备份

命令:save <seconds> <changes>

作用:通知 Redis 做一次快照持久化


2、自动备份

2.1、snapshotting

RDB

默认的持久化方式。

这种方式就是一段时间后将内存中的数据以快照的方式全部写入到二进制文件中

默认的文件名为dump.rdb。

可以通过配置文件设置自动做快照持久化的方式。

在 n 秒内,如果 m 个 key 被修改就自动做快照,默认配置是:

save 900 1  #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60  10000

每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的同步脏数据。

如果数据量的大话,而且写操作比较多,必然会引起大量的磁盘 io 操作,可能会严重影响性能。

另外快照是在一定时间间隔做一次,如果 redis 意外宕机,就会丢失最后一次快照后的所有修改。


2.2、append-only

AOF

将收到的写命令通过 write 函数追加到文件中,默认的文件名为 appendonly.aof 。

可通过配置文件设置生效。

  appendonly  yes           #启用 aof 持久化方式
# appendfsync always       #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
  appendfsync everysec     #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no           #完全依赖os,性能最好,持久化没保证

当 redis 重启时会通过重新执行文件中保存的写命令来在内存中重新建立整个数据库的内容。




六、Redis 安全


命令:config set requirepass 123

作用:设置密码为123

命令:config get requirepass

作用:获取密码

命令:auth password

作用:密码验证




七、Redis 主从


主从复制过程:

1、当配置好 slave 后,slave 发送 sync 命令建立连接,当 salve 和 master 建立连接后开始同步数据。

2、无论是第一次连接还是重新连接,master 都会启动一个后台进程,将数据的镜像保存到文件中,同时 master 主进程会开始收集新的写命令并缓存。

3、后台进程写完文件后,master 就发送文件给 slave,slave 将文件保存到硬盘上,然后加载到内存中,接着 master 会把缓存的命令转发给 slave ,后续 master 将收到的写命令发送给 slave。

4、如果 master 同时收到多个 slave 发来的同步连接命令,master 只会启动一个进程来写数据镜像,然后发送给所有 slave 。

5、master 同步数据是非阻塞的,可以同时接收用户的读写请求。然而在 slave 端是阻塞模式的,slave 在同步 master 数据时并不能够响应客户端的查询。

6、可以在 master 禁用数据持久化,只需要注释掉 master 配置文件中的所有 save 配置,然后只在 slave 上配置数据持久化。


主从复制流程:

1、copy 两份 redis.conf 文件,修改不同的端口号、pid 路径、log 路径

2、分别使用两个配置文件启动服务

3、分别使用客户端连接连个端口服务

4、分别使用 info 命令查看 role 属性

5、在从服务器上设置主服务器地址(此时两个都是 master)

命令:slaveof host port

6、分别使用 info 命令查看 role 属性(此时一个 master、一个 slave)

7、在主服务器上赋值,测试从服务器备份情况

注意:可以通过配置文件配置从节点


八、Redis 常用配置文件 redis.conf


# Redis 默认不是以守护进程的方式运行,可通过该配置项修改,yes 为启用
daemonize yes

# 当 Redis 以守护进程的方式运行时,指定 pid 文件的存放位置
pidfile /usr/local/redis/data/redis_6379.pid

# 绑定主机地址,设置成服务器的 IP 地址,默认为 127.0.0.1 本机外不可访问
bind 192.168.206.154

# 指定 Redis 的监听端口,默认 6379
port 6379

# 客户端闲置多长时间后关闭连接,如果指定 0 表示关闭该功能
timeout 0

# 设置数据库的数量,默认数据库为 0,可使用命令:select <dbid> 连接指定数据库 id
databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# save <secound> <changes>
# 默认配置如下 
# 分别表示
# 900秒(15分钟)内有1个更改
# 300秒(5分钟) 内有10个更改
# 60 秒(1分钟) 内有10000个更改。
save 900 1
save 300 10
save 60  10000



# 指定日志记录级别,公有四个级别:debug、verbose(默认)、notice、warning
loglevel debug

# 日志记录方式,默认为标准输出,如果 Redis 为守护进程方式运行,这里必须重新设置日志目录
logfile /usr/local/redis/data/redis_6379.log



# 存储在本地数据库时,是否压缩数据,默认 yes。
# Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项
rdbcompression yes

# 指定本地数据库文件名,默认为 dump.rdb
dbfilename dump.rdb

# 指定文件存放目录:rdb、aof
dir ./

# 指定是否在每次更新操作后进行日志记录(默认 no)
# Redis 默认情况下是异步的把数据写入磁盘
# 如果不开启,可能在断电时导致一段时间内的数据丢失
# Redis 本身同步数据是按照 save 条件同步的,所以有的数据会在一段时间内存在内存中
appendonly no

# 指定更新日志文件名,默认为 appendonly.aof
appendfilename appendonly.aof

# 指定更新日志的条件,有三个可选值
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折中,默认值)
# appendfsync everysec



# 设置当本机为 slave 时,设置 master 的IP地址和端口
# slaveof <masterip> <masterport>

# 当 master 设置了密码保护时,slave 连接 master 的密码
# masterauth <master-password>

# 设置连接密码,如果设置了连接密码,客户端在连接时需要通过命令 auth <password> 提供密码
# requirepass foobared


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值