redis

NoSQL:Not Only SQL。非关系型数据库。redis可以理解为就是map,以键值对的形式来保存数据

NoSQL的四大分类:

  1. 键值对存储数据库,使用一个哈希表。entry Redis,Oracle BDB

  1. 列存储。键依然存在 HBase

  1. 文档型数据库。以文档形式 MogoDB SQLite

  1. 图形数据库 Graph

Redis特点:

  1. redis高性能的key/value内存型数据库

  1. redis支持比较丰富的数据类型

  1. redis支持持久化 memacached不支持持久化

  1. Redis单线程,安全。

redis配置文件

  1. port 端口号

  1. redis默认提供了16个库,索引0-15,每个库之间是相互隔离互不干扰的

Redis数据类型

  1. String------------String

set:设置一个key/value

get:根据可以获取对应的value

mset:一次性设置多个key,value

mget:批量获取多个key对应的value值

getset:获取原始key的值,同时设置新值

strlen:获取key对应value的长度

append:为对应的key追加

getrange:从索引为0处开始截取,-1代表截取到末尾(包含起始和终止位置)

expire:设置一个key过期时间

setex:设置一个key的有效期(秒)

psetex:设置一个key的有效期(毫秒)

setnx:设置一个key/value,如果不存在就添加,如果存在,就不做任何操作

msetnx:批量设置,原子操作,可以同时设置多个key,只要有一个key存在,则全部失败

decr:进行数值类型的-1的操作

decrby:根据提供的数据进行减法操作

incr:进行数值类型的加一的操作

incrby:根据提供的数据进行加法操作

incrbyfloat:进行数值的加减浮点数的操作

  1. list-----------List

lpush:将某个值加入到一个key列表的头部

lrange:获取某一个下标区间内的元素

rpush:将某个值加入到一个key的尾部

lpushx:同lpush,必须保证list存在

rpushx:同rpush,必须保证list是存在的

lpop:返回和移除左边列表的元素

rpop:返回和移除列表右边的第一个元素。

llen:获取列表元素个数。

lset:设置某一个指令索引的值(索引必须存在)

lindex:获取某个位置指定索引的元素

lrem:删除重复元素

ltrim:保留列表中特定区间内的元素

linsert:在某个元素之前、之后插入新元素

  1. set-----------Set

sadd:为集合添加元素

smembets:显示集合中所有的元素

scard:返回集合中元素的个数

spop:随机返回一个元素,并删除

smove:从一个集合中向另一个集合中移动元素

srem:从集合中删除一个元素

sismember:判断一个集合中是否包含着各元素

srandermember:随机返回元素

sdiff:去掉第一个集合中含有的第二个集合的元素

sinter:求交集

sunion:求并集

  1. zset-------------TreeSet

  1. hash-------Map

hset设置一个键值对

hget:获取一个key对应的value

hgetall:获取所有的key、value对

hdel:删除某一个key/value对

hexists:判断一个key是否存在

hkeys:获得所有的keys

hvals:获得所有的value

hmset:设置多个key/value

hsetnx:设置一个不存在key的值‘

hincrby:给value进行加法计算

hincrbyfloat:给value加浮点值

Redis持久化机制

持久化机制:

内存-->磁盘

redis官方提供了两种不同的持久化机制。

  • 快照持久化(snapshot)

  • AOF(append only file)只追加日志文件

快照

这种方式可以将某一时刻的所有数据写入硬盘中,这也是redis默认开启的持久化方式,保存的文件是以.rbd的形式结尾,也称之为RDB持久化。

快照的生成方式

客户端方式 :BFSAVE或SAVE命令

服务器配置自动触发

关闭redis服务器

AOF持久化

这种方式将所有客户端执行的写的命令记录到日志中,将被执行的命令写到.aof结尾的文件末尾。只要redis从头到尾执行一次aof文件所包含的所有写的命令,就可以恢复aof文件记录的数据集合。(默认不开启)

如果快照持久化与AOF持久化同时开启,默认是以AOF持久化为主。

  1. 日志追加频率

always【谨慎使用】:每个redis写命令同步写入磁盘,严重降低redis速度。

everysec【推荐】:每秒执行一次同步,将多个写命令同步到磁盘。

no【不推荐】:由操作系统决定何时同步。

2.AOF带来的问题:

持久化文件appendonly.aof会越来越大

假设我们使用incr age 10000次,执行一次set age 10000就够了。

AOF重写(优化)

用来在一定程度上减少AOF文件的体积。

只需要执行BGREWRITEAOF

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

当aof文件大于64MB,并且aof文件的体积比上一次重写之后体积大了至少100%,会自动触发重写,如果重写过于频繁,可以考虑加大percentage设置为更大。

持久化总结:

这两种持久化方案既可以同时使用aof,又可以单独使用,在某种情况下也可以都不使用。无论是用那种持久化方案,将数据持久化到硬盘上。还应该对数据进行定期的备份,备份到不同的地方。

Redis事务控制

什么是事务?事务的四大特性?

开启事务:MULTI

提交事务:EXEC

放弃事务:DISCARD

说明:

  1. 如果在操作事务的过程中,出现了报错,视为当前事务被放弃(全体连坐)

  1. 如果在操作事物的过程中,只要不出现报错,在提交事务时出现报错,视为报错的操作不提交,其余操作正常提交事务。(冤头债主)

主从复制架构

集群

由一系列有关服务器构成的一种架构。

主从复制

当设置好 slave 服务器后,slave 会建立和 master 的连接,然后发送 sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master 都会启动一个后台进程,将数据库快照保存到文件中,同时 master 主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master 就发送文件给 slave,slave 将文件保存到磁盘上,然后加载到内存恢复数据库快照到 slave 上。接着 master 就会把缓存的命令转发给 slave。而且后续 master 收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从客户端发送的命令使用相同的协议格式。当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。

配置 slave服务器很简单,只需要在配置文件中加入如下配置

slaveof 192.168.1.1 6379 #指定 master的 ip 和端口。

由来解决数据的冗余备份。从节点仅仅用来同步数据、

主节点出现故障,从节点就无法定期的同步数据?

主节点宕机,从节点无法担任主节点,从节点一直在重复获取连接

从节点再次重新启动时,从节点会自动连接,并且可以进行正常主从复制。

哨兵模式

单节点并发压力问题?

哨兵的配置文件:

编辑:sentienl.conftong

sentinel monitor mymaster 127.0.0.1 6379 1

编译:windows系统下无法编译

通过指令启动哨兵服务

redis-sentinel sentinel/sentinel.conf

三大现象:

  • 穿透:

根据key从缓存中查不到数据,需要从数据库中查询数据,数据库中也查询不到数据,导致数据库扛不住压力而挂掉。

解决方案:

  1. 业务规则过滤

  1. 布隆过滤器,检验key长度或者前缀,过滤一批非法数据。

  • 雪崩:

更严重的击穿,击穿只是一个key失效了。

大量的请求访问大量的key,刚好大量key同时失效。

  • 击穿:

大量的请求访问同一个key,这个key过期了,大量的强求直接访问数据库,可能把数据库搞挂了。

解决方案:

业务规则过滤

加锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值