redis学习笔记

NoSql,泛指非关系型数据库,Nosql数据库得四大分类:

非关系数据库的特点:

1.数据模型比较简单

2.需要灵活性更强的IT系统

3.对数据库性能要求较高

4.不需要高度的数据一致性

5.对于给定的key,比较容易映射复杂值得环境

持久化机制

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘保证持久化.

redis持久化的两种方式;

1snapshotting(快照的方式)默认,将内存中以快照方式写入到二进制文件中。默认为dump.rdb,可以通过配置设置自动做快照的持久化方式。我们可以配置redis在n秒内如果超过m个key则修改就自动做快照

snapshotting

save 900 1 #800秒内超过一个key被修改 测快照报存

save 300 2 #300秒内如果超过十个key被修改侧快照报存

2.append-only file(缩写aop)的方式,(有点类似oracle日志)由于快照一定间隔时间做一次,所以了能发生redis意外down的情况就会丢失最后一次快照后的所有修改的数据。,aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写的命令通过write函数追加到命令中,当redis重新启动appendonly.aof.aof不是立即写到硬盘的。可以通过配置文件修改强制写到硬盘中。

appendonly yes #启动aof持久化方式

appendfsync always #收到命令理解写道磁盘,效率最慢,但保证完全的持久化

appendfsync everysec#每秒写入磁盘一次,在性能和持久化方面做到了很好的折中

appendfsync no 完全依赖os性能最好,持久化没保证

保证一致性

就算使用集群,也同样不能保证百分百得数据一致性,

假如在主节点挂掉得一两秒,这时从节点没有及时选举,可以会间隔一两秒,这时会产生大量数据不一致

解决方案两种

一种,代码级别处理 代码加入失败重试机制

配置项开启appendfsync always 收到得所有指令全记录日志 保证强一致性

https://www.cnblogs.com/EasonJim/p/7766738.html

技术上处理 Redis主从+KeepAlived实现高可用https://www.cnblogs.com/JeremyWYL/p/8562388.html

 

三种模式

主从模式

只有一台机器可写,读得时候用两个从节点

哨兵模式

哨兵节点

将他部署到一台机器上,监控这两个从节点

如果挂了,就先据,将从节点推为主节点

集群

redis均摊 将数据分布到 多个节点

redis 不是靠单点体现效果 串执行

 

多实例

memcache 适合单点 并执行 

aof 体现可靠性 多线程并发访问,写的的能力降低了,主要是写得时候会生成一条日志

可以用ssdb  解决, ssdb写得能力很快

前端加一个Lvs+Keepalived+Nginx+Tomcat高可用集群  负载均衡 技术得角度 

系统得瓶颈一定在后台,一定在数据库

mysql 主从集群 ,做一些策略

缓存主要解决得是关系型数据库降压,提高性能

 

String类型

set key value

setnx (not exist) 是否存在 存在不设置

setex (expired) 设置key的有效期

setange 替换字符串

setex color 10 red 设置过期时间10秒

setrange email 10 ww (标识从第十位开始替换)

高性能设计模式

主要数据存储一个对象,条件存储一个单独得key:value键值对形式,key条件类型,value 主要对象得id

例如

主要对象

user{id:1,name:张三,age:20,sex:m}

条件对象就是

取age-20可获取所有主对象年零为20得用户

age-20{id1,id2,id3}

Map

应用场景 使用map存储json

hash 用的比较多

hset  myhash key value

expire 设置key过期时间

redis 安装最新版

官网 https://redis.io/download

sudo wget 下载地址

sudo tar -zxvf redis-*.tar.gz  -C ./redis

sudo apt-get install gcc

sduo apt-get install make

sudo make MALLOC=libc

sudo make install

reids 集群搭建(3.0才有集群,5.0以后抛弃了ruby)

prot 700*

bind 127.0.0.1(外网访问需要指定外网地址)

dir /usr/local/redis-cluster/700*/(指定数据文件存放位置,必须指定不同的目录,不然会丢失数据)

cluster-enabled yes(启动集群模式)

cluster-config-file nodes700*.conf(这里700x最好和prot对应上)

cluster-node-timeout 5000

appendonly yes

将文件放入各个目录下(7001/redis.conf,7002/redis.conf)

#5.0 以上跳过
apt-get install ruby

apt-get isntall rubygems

gem install redis(安装reis和ruby接口)


启动redis 

redis-server 700*/redis.conf(伪代码)

查看是否启动

ps -ef|grep redis

创建集群(集群是通过ruby实现管理的).

3.0到5.0

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006

5.0以上不需要ruby了

--cluster-replicas 2 表示一主两从

redis-cli --cluster  create   127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006 --cluster-replicas 2

 

集群启动脚本 脚本放在 700*文件夹同级

echo '123456' | sudo  -S ls
#kill
sudo killall redis-server
sudo rm -rf /usr/local/redis-cluster/*/node*.conf
sudo rm -rf /usr/local/redis-cluster/*/appendonly.aof
sudo rm -rf /usr/local/redis-cluster/*/dump.rdb
#start
sudo redis-server /usr/local/redis-cluster/7001/redis.conf
sudo redis-server /usr/local/redis-cluster/7002/redis.conf
sudo redis-server /usr/local/redis-cluster/7003/redis.conf
sudo redis-server /usr/local/redis-cluster/7004/redis.conf
sudo redis-server /usr/local/redis-cluster/7005/redis.conf
sudo redis-server /usr/local/redis-cluster/7006/redis.conf
#create
sudo redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

三、集群客户端命令(redis-cli -c -p port)
集群
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
cluster meet :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget :从集群中移除 node_id 指定的节点。
cluster replicate :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot node :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot migrating :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot importing :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot stable :取消对槽 slot 的导入( import)或者迁移( migrate)。

cluster keyslot :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot :返回 count 个 slot 槽中的键

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值