理论

 1.业务拆分
2.数据不能拆、使用算法,将数据分片
a.hash+取模

 

 

b.random随机分配  一般可以做消息队列

 

 

c.一致性hash/映射算法
  1.算法生成hash环
  2.机器node01、node02是物理机,可以在环上根据算法生成对应的物理点
  3.凡是数据物理点之前的数据都属于该机器的值
  4. client输入数据,点落到那个物理点范围内就存储到那个范围内
  5.问1:增加一台机器数据怎么办?a.可以增加、可以分担其他节点的压力,不会造成全局洗牌。b.新增节点会造成一小部分不能命中(新增环上的物理点到上一个物理点之间的数据没有)
    带来问题:1. 击穿,压到mysql 2.
  6.问2:

 

 

  

 

redis连接成本很高怎么做:
  a.增加代理

 

 

 

 

 

 

 

 

代理实战:

使用twitter代理
git学习网址:https://github.com/twitter/twemproxy
下载:git clone https://github.com/twitter/twemproxy.git
如果:Http request failed
yum update nss
cd twemproxy

autoreconf -fvi
需要安装高版本,解决办法:https://www.cnblogs.com/fnlingnzb-learner/p/5831443.html
./configure --enable-debug=full
make

配置:

cp tmp/twemproxy/scripts/nutcracker.init /etc/init.d/
cd /etc/init.d
chmod +x twemproxy 变绿
查看twemproxy文件需要两个配置:

 

1.将conf目录下所有文件移动到/etc/nutcracker
cp ./*  /etc/nutcracker/

2.配置全局环境path  比如放到:根目录下/bin、/sbin、 /usr/bin

    cp /tmp/twemproxy/src/nutcracker /usr/bin

3. 备份并编辑 vi nutcracker.yml

4. 只留下alpha、删除其他 命令: d G

5. 在增加服务6380

 

 

启动:

1.启动redis 6379
redis-server --port 6379

1.启动redis 6380

redis-server --port 6380

1.启动代理默认端口22122

service twemproxy start

测试代理:

redis-cli -p 22121

127.0.0.1:22121> set a a
OK
127.0.0.1:22121> set b b
OK
127.0.0.1:22121> set ooxx a
OK
127.0.0.1:22121> set ooaa b
OK
127.0.0.1:22121> lpush list1 a b c d e f g h i g k l
(integer) 12

 

127.0.0.1:22121> keys *
Error: Server closed the connection
127.0.0.1:22121> watch a
Error: Server closed the connection
127.0.0.1:22121> multi
Error: Server closed the connection

  

测试redis6380

[root@redis2 ~]# redis-cli -p  6380
127.0.0.1:6380> keys *
1) "list1"
2) "ooaa"
3) "ooxx"
127.0.0.1:6380> get ooxx
"a"

  

测试redis6379

[root@redis2 ~]# redis-cli -p 6379
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> keys *
1) "b"
2) "a"

  

结论:

  • 对于客户端只需要直到代理即可。
  • 代理将不同的key发送到不同的redis服务上
  • 代理不能获取全量key、不能watch、不能开启事务

 

posted on 2021-01-23 12:27  陕西小楞娃  阅读(102)  评论(0编辑  收藏  举报