redis知识归纳

2020-04-22  本文已影响0人  鸡龙

一、linux redis搭建环境

分为docker安装和官网下载手动安装,docker就不描述了

1. 下载

官网redis下载

下载获得redis-版本号.tar.gz后将它放入我们的Linux目录/opt

/opt目录下,解压命令:tar -zxvf redis-版本号.tar.gz

解压完成后出现文件夹:redis-版本号,进入目录:cd redis-版本号

2. make

3. 安装目录

查看默认安装目录:usr/local/bin

Redis-server:Redis服务器启动命令 -> redis-server /配置路径/配置文件

Redis-cli:客户端,操作入口

Redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何

Redis-check-dump:修复有问题的dump.rdb文件

Redis-check-aof:修复有问题的AOF文件

Redis-sentinel:redis集群使用

4. 运行前的配置

5. 客户端连通测试

1)本地连通测试

2)外部连通测试

现在暂时使用的是虚拟机作为redis-server,而在物理机中使用redis-client。这相当于在局域网当中进行联通。

6. 设置访问密码

1)方法一、修改配置文件

进入到redis.conf配置文件中取消注释requirepass并在后面改成自己想要的密码
requirepass 123456

需要重启生效

2)方法二、client中修改config

连通后,可以获取到config中的密码,使用config get requirepass

当然也能修改密码config set requirepass 123456

立即生效

3)密码验证

连通后,auth 123456才能输入指令,不然会被拒绝访问

二、redis知识点

1. 基本通用指令

Select命令切换数据库

Dbsize查看当前数据库的key的数量

Flushdb:清空当前库

Flushall;通杀全部库

2. 键+数据类型(5+1)

1)key

2)String

set k1 v1
#ok
get k1
#"v1"

3)Hash

> hmset user:1000 username antirez birthyear 1977 verified 1
OK
> hget user:1000 username
"antirez"
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "1"

4)List

List可从rpush也能从lpush;

也可从rpop和lpop;

但输出只有lrange并没有rrange;

> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"

5)Set

简单使用

127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "1"
2) "2"
3) "3"
> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0

6)Zset

根据增加score来进行排序的Set,正常的set指令为sadd myset v1 v2 v3

而Zset的指令为zadd myZset score1 v1 score2 v2 score3 v3

会根据这个score的从小大进行排序,如果相同则比较字符串,得出一个唯一的序列。

添加zset数据

> zadd hackers 1940 "Alan Kay"
(integer) 1
> zadd hackers 1957 "Sophie Wilson"
(integer 1)
> zadd hackers 1953 "Richard Stallman"
(integer) 1
> zadd hackers 1949 "Anita Borg"
(integer) 1
> zadd hackers 1965 "Yukihiro Matsumoto"
(integer) 1
> zadd hackers 1914 "Hedy Lamarr"
(integer) 1
> zadd hackers 1916 "Claude Shannon"
(integer) 1
> zadd hackers 1969 "Linus Torvalds"
(integer) 1
> zadd hackers 1912 "Alan Turing"
(integer) 1

使用zrange(从小到大)或zrevrange(从大到小)来输出他们,

> zrange hackers 0 -1
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Claude Shannon"
4) "Alan Kay"
5) "Anita Borg"
6) "Richard Stallman"
7) "Sophie Wilson"
8) "Yukihiro Matsumoto"
9) "Linus Torvalds"

五大类型更多使用详看官网

3. 配置文件

配置文件分为几大块

1)Units单位

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

配置大小单位,开头有定义一些基本的单位,只支持使用bytes定义,不支持bit,并且对大小写不敏感。

2)INCLUDES包含

可以将配置拆分成细小的配置文件,然后通过总配置文件将其他配置文件包含进来。格式include /path

3)GENERAL通用

描述 默认
daemonize 守护进程 no
pidfile 以守护进程启动时创建的pid文件路径 /var/run/redis.pid
port 运行的端口号 6379
tcp-backlog 设置tcp的backlog最大长度,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列 511
Timeout 定时关闭连接 0
bind 允许ip连接 127.0.0.1
Tcp-keepalive 单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60 0
Loglevel 日志等级 notice
Logfile 日志文件路径 ""
Syslog-enabled 是否启动系统日志 no
Syslog-ident 系统日志标志 redis
Syslog-facility 输入日志的设备 local0
Databases 库的数量 16

4)SNAPSHOTTING快照

描述 默认
save save 秒钟 写操作次数 save 900 1
save 120 10
save 60 10000
stop-writes-on-bgsave-error save出错时停止写 yes
rdbcompression 是否使用LZF压缩快照 yes
rdbchecksum 是否使用CRC64算法进行数据校验 yes
dbfilename 持久化rdb的文件名称 dump.rdb
dir 文件根目录 ./

5)REPLICATION复制

描述 默认
replica serve stale data 主从复制中是否响应客户端请求 yes
replica-read-only slave端是否只能读不能写 yes

6)SECURITY安全

描述 默认
requirepass redis访问密码 ""

7)LIMITS限制

描述 默认
Maxclients 设置redis同时可以与多少个客户端进行连接 10000
Maxmemory 设置redis可以使用的内存量 0
Maxmemory-policy 达到最大内存量时使用什么算法移除key volatile-lru
Maxmemory-samples 设置样本数量 5

8)APPEND ONLY MODE追加

描述 默认
appendonly 是否开启aof no
appendfilename aof文件名 "appendonly.aof"
Appendfsync 同步策略 everysec
No-appendfsync-on-rewri 重写时是否可以运用appendfsync no
Auto-aof-rewrite-min-size 设置重写的基准值 64m
Auto-aof-rewrite-percenta 设置重写的基准值 100

4.持久化

1)RDB(Redis DataBase)

在指定时间内将数据集快照写入磁盘,在上面配置文件中SNAPSHOTTING中的save属性就是配置RDB的快照频率。

save 900 1 save 300 10 save 60 100,意味着60秒内进行100次修改操作就进行一次快照。300秒内10次,900秒内1次。

并且保存的文件默认为启动的dump.rdb。

使用save和bgsave能立即进行快照。不同在于bgsave是异步执行

2)AOF(Append Only File)

需要手动启动,将appendonly从no改为yes

与RDB不同,AOF中是记录所有操作而并非数据集,在运行redis-server以后,会将aof文件中的操作重新执行一遍。

在配置文件中APPEND ONLY MODE下的重写基准可以设置在文件达到多少级别时进行重写。这会将添加之后再删除的数据操作进行约分扣除。

从配置文件中的Auto-aof-rewrite-min-size与Auto-aof-rewrite-percenta可知rewrite触发机制:redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发

3)机制

在rdb与aof中被恶意插入一些不可被redis识别的语句时,可以执行安装目录下的redis-check-aof --fixredis-check-dump --fix来修复。

在rdb与aof同时启动时,会优先使用aof,如果aof文件损坏,则redis启动会报错。

相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb,Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

5.redis事务

redis的事务和数据库中的事务不太一致,在redis事务中,是将所有的操作进行入队,然后再进行全部出队执行。而不是执行一项后再进行下一项。

1)正常执行

使用multi后执行入队操作,最后使用exec执行事务

127.0.0.1:6379> get balance
"100"
127.0.0.1:6379> get dept
"0"
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY balance 10
QUEUED
127.0.0.1:6379> INCRBY dept 10
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 90
2) (integer) 10

2)放弃事务

使用discard放弃事务

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> decrby balance 100
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379> get balance
"90"

3)回滚

在事务中某个操作具有语法错误,不可执行的情况下。事务会全部作废不会生效。

因为redis的事务为入队后出队执行,所以在redis中入队时识别到语法具有错误,进行的回滚,并不是真正的回滚,只是不执行事务。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> decrby balance 20
QUEUED
127.0.0.1:6379> set error
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.

4)指明错误

在事务中某个操作是可执行的,但会报错的操作时,事务不会回滚,只会提示哪一步错误。

127.0.0.1:6379> set string s1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> decrby balance 20
QUEUED
127.0.0.1:6379> decrby string 20
QUEUED
127.0.0.1:6379> incrby dept 20
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 70
2) (error) ERR value is not an integer or out of range
3) (integer) 30

5)watch监控

使用watch key来监控某个值在事务的过程中是否被别的client修改。

watch指令类似乐观锁,所以watch之后,在exec之前,别的客户端是能够进行修改的。只有在最后exec之后,进行判断版本时,发现被修改后会报错,事务需要重新入队,重新执行。

通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,

EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败

6.主从复制

主从复制遵循配从不配主,意思是,主机不进行任何配置的情况下,可以被小弟(slave从机)加入。

1)复制操作

自己本地单机实验时,需要拷贝多个redis.conf文件给从机,并且port,rdb,aof,log文件配置需要与主机不同并开启daemonize,使得其与主机的生成文件不同。

配置好之后,开启主机与从机,在刚启动两台服务时,使用info replication指令都能看到role:master

在从机中使用指令slaveof 127.0.0.1 6379,再使用info replication会发现角色变为了slave。这时,主机中添加了记录,在从机中会拷贝过去。

注:因为配置了从机的replica-read-only,所以在变为从机时,只可读不可写。

2)复制原理

3)哨兵模式(sentinel)

在主从模式中,如果主机宕机时,那么从机会原理待命不动,这时候需要哨兵模式监督从机进行投票选举,选出一个新的master机器。

在配置文件目录下新建sentinel.conf,一定不能打错字。

打开新建的哨兵配置文件,在下面填写内容sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1,这里的1指的是,当从机获得多少票时,自动上位为master。

注:当原有的master回归后,其角色也为master,但他属于“光杆司令”,并没有从机再去恢复为他的slave。

上一篇下一篇

猜你喜欢

热点阅读