1.数据类型: strings,(常用) lists(双向链表,可以找到某个位置上的元素,粉丝关注列表,消息队列), hashes(value里存的是对象 如用户), sets(无重复,无序), sortsets(有序)
2.常用命令: kes键, expire失效时间, tll查看失效时间, persist持久化, select切换库, move移数据到某个库 info查看所有(默认16个库) 进入redis命令:redis cli -a+密码
3.java所用的redies api :Jedis :flushdb(清除数据),list(lpush,rpush),string(set,mset),set(sadd,交集sinter,并集sunion,差集sdiff) sortset(zadd,zrange输出,zscore,zrank位置),hash(hmset)
集群
1.一主多从 如三主三从构成一个集群,如果一个主机挂了,丛机会变成主机,等到原主机恢复自动变成丛机
2.水平添加集群:cluster nodes查看集群所有节点, 复制原有的节点(新建文件夹辅助redis.Conf), vim修改端口, 用redis trib.rb add-node命令添加到集群,reshard重新分片
Java和Redis通讯
1.可以通过很多客户端 最常用的jedis,实现了一个command接口,里面有各种redies的方法,拼接resp密文 有* $之类的 定义了keyvalue的lenth
Redis安装和集群
1.集群命令cluster-enabled yes redis-trib.rb create replicas 1 ip…
Redis的事物
开始:multi exec watch discard unwatch
Thrift rpc框架
1.idl文件 xxx.thrift文件
2.用idl文件生成java代码(接口)
3.实现服务接口 编写java具体实现类
4.引入接口 进行远程调用
基本类型: byte i16 i32 i64 double string
容器类型: list set map
结构体:struct
异常:exception
服务:service
类型定义:typedef
常量:const
命名空间namespace (javapackage)
Rabbitmq 消息队列 相当于一个中转站
1.端口15672 ,队列名,路由键,交换器
2.好处:同步变异步,解耦,削峰
3.配置文件 host port username password
4.配置文件注解configurable 创建队列
5.Sender发送类 注入amqptemplate掉。Convertandsend方法, 消费者 注解rabbitlistener(路由键,交换器,对列) rabbithandler process方法
6.消息头中有 路由键+优先级+持久化
7.交换器 三种方式:direct基于路由键讲对列和交换器绑定 findout无路由键 topic模糊查询路由键
Zookeeper
1.负载均衡相当于一种反向代理,正向代理:你告诉司机去哪,反向代理:前台选择哪个人给你面试。 nginx 三个bmp (一样的代码 只是不一样) 三种方式 1:轮询 2:固定用户到固定的服务 3:服务session数据共享
2.ssm配置dubbo 在applicationcontext中配置dubbo zookeeper 有ip 端口 别名 component扫包之类的,但是在springboot中提供者有一个注解@service(dubbo) 可以直接配置 消费者是reference
Dsf接口用到了,export和import的servicename相同
高并发性能优化
1.使用缓存 第一次查完之后放到redis,之后再查先看redis(原子计数器),protostuff序列化 消息队列 rabbitmq(记录行为消息) 再到sql jdbc事物是通过threanlocal来保证同一个线程里获取的connect是一样的 通过trycatch执行事物每个dao操作,直接通过mysql控制事物 存储过程减少行锁rowlock的时间
Netty
1.可以用两个线程组eventloopgroup, 一个处理accept连接 一个处理读写请求,也可以用同一个线程池去处理,支持多种协议:tcp, udp,绑定服务通道Channel NIOserversocketchannel(客户通道NIOsocketchannel) 初始化channelinitializer 监听端口
辅助启动类 serverboortstrap
2.•BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的
3.线程模型:单线程 由一个线程管理accept 读写等 多线程:一个accpet 和一个线程池管理读写 主从多线程多个accpet