redis 、 mangodb 、 memcache
都是NoSQLs数据库:非关系型数据库。mysql就是关系型数据库。
redis | mongodb | memcache | |
---|---|---|---|
数据类型 | 五大类型 string、list、hash、sorted set 、set |
key-value 值可以是文档,数组及文档数组 |
key-value |
线程 | 单核单线程 | 多线程 | 多核多线程 |
主要存储形式 | 内存(也可持久化到磁盘) | 磁盘 | 内存 |
主从模式(分布) | 支持 | 支持 | 不支持 |
自动复制 | 支持 | 支持 | 不支持 |
TPS性能 | 高 | 稍弱 | 高 |
分片 | 支持 | 支持 | 支持 |
过期策略 | 支持 | 不支持 | 支持 |
自动故障恢复 | 哨兵模式 | 内部paxos选举 | 不支持 |
事务支持 | 支持(稍弱,事务中的每个操作连续执行 | 不支持 | 支持(cas保证) |
消息发布/订阅 | 支持 | 不支持 | 不支持 |
断电数据恢复 | 支持 | 支持 | 不支持 |
编写语言 | ANSI C | C++ | C |
应用场景 | 数据量较小但更性能操作和运算上 | 海量数据的访问效率问题 | 减少数据库负载,提升性能;做缓存,提高性能 |
Redis发布订阅与ActiveMQ的比较
(1)ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持;
(2)ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失;
(3)ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。
(4) MQ 提供了丰富的发布订阅方式,例如 queue、topic。还有 ack 消息确认机制,以及推送和主动拉取消息的选择方式。
总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的。
JVM调优
cpu 100%
1.执行 top 命令,查看占用cpu使用率最高的 pid 进程
2.使用 top -Hp pid ,键入大写P,按照cpu使用率排序,找出最耗cpu的线程id
3.将线程 id 转换成 16 进制(堆栈里面线程id 是16进制表示的)
4.使用 jstack pid | grep '线程id(16进制)' -C5 --color 查看最耗cpu的线程
5.找到对应代码进行排查。
内存飙高:
使用top ,查看 %MEM% 比较高的 pid
jmap -heap pid 查看堆内存使用情况,
jmap -histo:l