redis复习

reids

存储结构

1:字符

set hello world

get hello

递增数字

incr key 相应的value会+1(原子递增,针对int)

incryby/decr key increment 递增指定的整数(针对int)

以上都是原子操作

 

append key value :向指定的key追加字符串(加载value上)

strlen key 获得key对应的value的长度

mget key key ….. 同事获得多个key的value

mset key value key value …..

key的设计

对象类型 : 对象id :对象属性:对象子属性

建议对key进行分类,同步在wiki中统一管理

短信重发机制: sms:limit:mobile

====================

2:列表

list ,可以存储一个有序的字符串列表

lpush key value

rpush key value

lpop/rpop key

lien key 获取列表的长度

Irange key start stop: 索引可以是负数。-1表示最有欧变的第一个元素

lrem key count value 删除 个数。值

lset key index value 设置

===========================

3:散列

hash key value

hset person age 20

hset person name mic

hset person name male

hget person name mic

hmset user age 25 sex female name xx

hmget user age sex name

hgetall key 获取hash的所有信息,包括key和value

 

hsetnx 存在返回0,不存在返回1

hdel key field [field……] 删除一个或者多个

=========================================

4:集合

无序

set和list不同

sadd key member 增加数据 如果value已经存在,则会忽略已经存在的值,并且返回成功加入的元素的数量

srem key member 删除元素

smember key 获得所有数据

5:有序集合

有序

zadd key score member

 

zrange key start stop [withscores]

如果两个元素的score是相同的,那么根据(0<9<A<Z<a<z)

 

 

功能

1:为每个key设置超时时间

2:通过列表类型来实现分布式队列的造作

3:支持发布定于的消息模式

 

应用场景

1“数据缓存

2:单点登录

3:秒杀抢购

4: 网站排名

5:应用的模块开发

 

安装

1:下载,tar zxvf

2: 编译 make

3:make test 测试编译

4:make install 安装

5:make install PREFIX=/data/server 安装路径

 

 

 

redis-server 启动服务

Redis-cli 访问redis的控制台

redis-benchmark

性能测试工具

redis-check-aof 文件检查工具

redis-check-dump rdb文件检查工具

redis-sentinel :服务器配置

 

 

启动redis ./redis-server ../redis.conf

停止:单机:control+ C

后台:./redis-cli shundown

启动默认单机模式

修改redis.conf

daemonized yes //是否后台运行

 

访问redis 控制台

./redis-cli -h 192.168.1.1 -p 6379

 

 

多数据支持

默认支持16个数据库,可以理解为一个明明空间

跟关系型数据库不一样的点

1:redis不支持自定义数据库名字

2:每个数据库不能单独设置授权

3:每个数据库之间并不是完全隔离的,可以通过flushall命令清空redis实例里的所有数据库的key

 

select dbid 去选择不同的数据明明空间。

dbid的取值范围默认0-15;

使用入门

1:获得一个符合匹配规则的键名列表

keys pattern [? *[]]

keys mic:rubby

2: 判断一个建是否村子 EXISTS key 存在返回1,不存在返回0

3:type: key 去火的这个key的数据结构类型

 

各种数据接口的使用

 

 

 

 

redis 事务处理

multi 开启事务

EXEC 执行事务

 

设置过期时间

expire key time

ttl key

 

 

 

 lua 安装

https://www.runoob.com/lua/lua-environment.html

lua语言好处

Redis中的应用

redis.call("set","key","value");

local var=redis.call("get","key");

1:减少网络开销

2:原子操作

执行时,其他同样的key进行操作,都无法执行

./redis-cli --eval lua.lua

3:复用性

lua脚本的安装

1:tar -zxvf ….

2: make linux

3: make install

输入lua 就可以进入控制台

 

弱类型语言

变量

全局变量、局部变量

a = 1 ; local b =2

a==b 比较两个值是否相等

~= 不等于

逻辑运算符

and / or

not (a and b)

 

eval 执行脚本

 

 

 

redis持久化策略

RDB/AOF

可以同时使用,如果同时使用,会优先使用AOF来还原数据

RDB:按照规则,定时将内存的数据同步到磁盘

触发快照情况:

1:自己配置的快照规则

实践:以下三者是||的关系

save <seconds> <changes>

save 900 1 在900s内被更改 的key的数量大于1的时候,执行快照

save 300 10

save 60 10000

2:执行save或者bgsave命令

save: 执行内存数据同步到磁盘的请求,这个操作会阻塞客户端的请求

bgsave:后台异步执行快照操作,不会阻塞

3:执行flushall的时候(清楚所有db里的数据)

清除内存的所有数据,只要有规则就会执行规则

4:执行复制的时候

 

 

快照的实现原理

redis会使用fork函数复制一份当前进程的副本(子进程)

 

redis 的优缺点

1:可能回存在数据丢失的请求(缺点)

2:可以最大化redis的性能(优点)

 

AOF: 每次执行命令后,将命令本身记录下来, aof会把redis执行的每一条命令追加到磁盘文件中

默认AOF不生效,

如何生效:

更改conf下的appendonly yes :重启后执行对数据的变更命令,会在bin目录下生成对应的aof命令

AOF和rdb同时开启则使用aof

auto-aof-rewrite-percentage 100 表示当前aof文件大小超过上一次aof文件大小的百分比多少的时候会进行重写。如果之前没有重写过,以启动时的大小为标准

auto-aof-reworite-min-suze 64mb 限制允许重写最小aof文件大小,也就是文件小于64mb的时候,不要进行优化

 

aof重写过程是安全的

 

同步磁盘数据

redis每次更改数据的时候。apf机制都会将命令记录到aof文件,但是实际上由于操作系统的缓存机制,数据并没有实施写入硬盘,而是进入硬盘缓存,去刷新到保存到新文件

 

aof安全性高,rdb数据易丢失

// todo

内存回收策略:待补充

 

redis集群

1:主从(从只能读取,不能操作)

修改从redis的conf 下的slaveof

主机可以通过 info replication 进行查看

 

实现原理

1: slave链接到master后,会向master发送一个sync指令

2: master收到SYNC的时候,会做两件事

a;执行bgsave(rdb快照)

b:master会把新收到的修改指令存入缓冲区

3:replconf listening-port 6379 sync

集群的缺点:

没有办法对master进行动态选举,如果master挂掉,那么从的也没办法选举,只能读取之前同步的数据

复制的方式:

1:基于rdb文件的复制(第一次链接或者重连的时候)

2:无硬盘复制(conf配置)

3:增量复制 (不需要发送sync命令 而是psync,记录偏移量offset)

 

 

哨兵机制

sentinel

 

当主服务器挂掉是,可以通过哨兵机制,让从服务器变成激活成主的

sentinel.conf

配置三台sentinel

sdown 哨兵主观

0down客观

redis指令

info replication

哨兵机制+redis主从 ====高可用

 

 

如有错误,请邮件zs253499660@sina.com,如有更好的方法,可以推荐
原文地址:https://www.cnblogs.com/senjiang/p/13418896.html