Java开发技术大杂烩(二)之(redis、mysql、http、shiro、threadlocal)

###前言linux

工做越久发现本身越麻瓜。感受只有天天积累一点,才不会以为空虚。ajax

###redis-benchmark用法 redis-benchmark是用于给redis进行压测的。 1.100个并发链接,10000个请求redis

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000spring

2.存取大小为100字节的数据包数据库

redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100windows

3.只测试某些操做的性能后端

redis-benchmark -t set,get,lpush -q -n 10000浏览器

4.只测试某些数据存取的性能缓存

redis-benchmark -n 10000 -q script load "redis.call('set','cmazxiaoma','123')"服务器


###jmeter命令行使用 1.在windows上录好jmx 2.在linux上进行命令行操做

sh jmeter.sh -n -t xxx.jmx -l result.jtl

3.把result.jtl导入到windows上的jmeter


###合理更新缓存 通常咱们正确使用Redis的策略是先更新数据库,再删除缓存。在这种状况下,咱们能够考虑出脏数据的场景:有一个读操做,可是没有命中缓存,而后就到数据库取数据。此时正好来了一个写操做,让缓存失效,而后以前的那个读操做再把老数据放到缓存中,因此产生了脏数据。

可是这种场景出现的几率很低,由于这个条件须要发如今读操做时缓存须要失效,并且并发着有一个写操做。而实际上数据库的写操做会比读操做慢的多,并且要锁表,而读操做必需要在写操做以前进行数据库操做,并且还要晚于写操做更新缓存。


###Linux命令 1.查看linux服务器CPU核数

cat /proc/cpuinfo|grep processor

2.给脚本赋权限,chmod是change the permissions mode of file。u表明全部者,x表明执行权限,+表示增长权限。

chmod n+x *.sh

3.查看系统当前可用内存

cat /proc/meminfo

###Java编码 1.Java一概采用Unicode编码方式,每一个字符不管中文仍是英文字符都占有2个字节。 2.Java虚拟机中一般使用UTF-16的方式来保存一个字符。

###MySQL 1.咱们查看会话等待时间,全局等待时间。特别提醒:时间的大小不能随便设置,时间过长致使过多的connection sleep,占用较多系统资源。从业务出发,结合查询的耗时和业务吞吐量。

show global variables like 'wait_timeout' show session variables like '%wait%'

2.建惟一索引

alter table order_info add unique key u_idx_user_goods(user_id,goods_id)

###Http状态码 当咱们先后端分离 + 页面静态化(htm + ajax)去作商品详情页时,请求会返回304。304状态码:若是客户端发送了一个带条件的GET请求且该请求已被容许,而文档的内容并无改变,则服务器应返回这个304状态。对于商品详情页而言,对数据的及时性没有那么的高,应该考虑将界面缓存到用户的浏览器中。在application-dev.properties中j进行以下配置。

spring.resources.chain.cache=true spring.resources.chain.enabled=true

###Ajax 当咱们发送Ajax的请求时,要判断readystate=4和status=200才能进行下一步。那么readystate又分为哪几步呢。

0 - 未初始化,尚未建立对象。 1 - 已打开,对象已经建立而且已初始化,但还未调用send方法。 2 - 已发送,已经调用send方法,但对象等待状态码和响应头返回。 3 - 正在接收,已经接收到部分数据,但还不能调用该对象的属性和方法,由于状态码和响应头不完整。 4 - 已加载完,全部数据接收完毕。


###Shiro Shiro的Subject对象是由SecurityManager、HttpRequest等信息建立,而后把Subject绑定到当前线程(servlet线程)。SecurityUtils的getSubject方法是从当前线程中得到到Subject对象的。


###ThreadLocal ThreadLocal自己不存储值,每个Thread维护着一个ThreadLocalMap,ThreadLocalMap中的key就是ThreadLocal实例自己,value是其须要存储的Object对象。

ThreadLocalMap使用ThreadLocal的弱引用做为其key,若是一个ThreadLocal没有外部强引用去引用它,那么系统GC的时候,这个ThreadLocal会被回收。GC后,ThreadLocal会出key为null的Entry,咱们没法访问这些key为null的Entry中的value。若是当前线程迟迟不结束的话,这样key为null的Entry的value就会造成一条引用链:Thread Ref -> Thread -> ThreadLocalMap -> Entry -> value,最终形成内存泄漏。


###尾言

脑子很差使,就多背多积累吧。

相关文章
相关标签/搜索