发表于: 2018-03-22 13:36:32

2 540


问题终于解决啦

就是修改Object的类------>换成list集合

package com.fuwei.util;

 

import org.apache.log4j.Logger;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.ValueOperations;

 

import java.io.Serializable;

import java.util.List;

import java.util.Set;

import java.util.concurrent.TimeUnit;

 

/**

* Redis工具类

*/

public class RedisUtil {

private RedisTemplate<Serializable, List> redisTemplate;

 

/**

* 批量删除对应的value

* @param keys

*/

public void remove(final String... keys) {

for (String key : keys) {

remove(key);

}

}

 

/**

* 批量删除key

* @param pattern

*/

public void removePattern(final String pattern) {

Set<Serializable> keys = redisTemplate.keys(pattern);

if (keys.size() > 0)

redisTemplate.delete(keys);

}

 

/**

* 删除对应的value

* @param key

*/

public void remove(final String key) {

if (exists(key)) {

redisTemplate.delete(key);

}

}

 

/**

* 判断缓存中是否有对应的value

* @param key

* @return

*/

public boolean exists(final String key) {

return redisTemplate.hasKey(key);

}

 

/**

* 读取缓存

* @param key

* @return

*/

public Object get(final String key) {

Object result = null;

ValueOperations<Serializable, List> operations = redisTemplate

.opsForValue();

result = operations.get(key);

return result;

}

 

/**

* 写入缓存

* @param key

* @param value

* @return

*/

public boolean set(final String key, List value) {

boolean result = false;

try {

ValueOperations<Serializable, List> operations = redisTemplate

.opsForValue();

operations.set(key, value);

result = true;

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

 

/**

* 写入缓存

* @param key

* @param value

* @return

*/

public boolean set(final String key, List value, Long expireTime) {

boolean result = false;

try {

ValueOperations<Serializable, List> operations = redisTemplate

.opsForValue();

operations.set(key, value);

redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);

result = true;

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

 

public void setRedisTemplate(

RedisTemplate<Serializable, List> redisTemplate) {

this.redisTemplate = redisTemplate;

}

}

 

查询接口处

第一次储存数据在redis里面(这个时候不能转换成json格式的数据)

json的数据返货回来的数据不是集合需要序列化

这个地方容易出问题(最开始就是这个地方出问题<转换成就送数据>)

在服务器上面查看数据

第二次访问 缓存里面获取数据

还有返回的数据展示到jsp页面

终于把这个redis的缓存弄好了(搞了好久的时间)

 

接下来准备测试压力

先部署一下准备测试压力

数据的通过量


图形的展示

基本通过量是在200左右的数据

现在关闭redis在再来测试一次

再来测试一次

同样的链接 通过的数据少了很多

平局量也少很多

最后在看看深度思考

1.为什么要使用memcachememcashe有什么作用?

主要用于动态Web应用以减轻数据库的负载。

                它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

Memcache的实现原理

memcache处理的原子是每一个keyvalkey会通过一个hash表转换成hashkey,便于查找对比以及竟可能的做到散列。

                同时mem用的是一个二级散列,通过一个hash表来维护。memcache有两个核心组件:服务端和客户端。

                在一个memcache组件查询中,client先通过keyhash值来确定kvservice端的位置,当server端确定后,客户端就会发一个请求个server端。

                让它来查找出确切数据,因为这之间没有交互以及多播协议,因此mem带给网络的影响最小。

2.什么是负载均衡,为什么要做负载均衡?

要理解负载均衡,必须先搞清楚正向代理和反向代理。

正向代理与反向代理【总结】

注:

  • 正向代理,代理的是用户。
  • 反向代理,代理的是服务器

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

3.nginx如何实现负载均衡?

http://blog.csdn.net/qq_28602957/article/details/61615876(参考资料)

1、轮询(默认) 

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream backserver { server 192.168.0.14; server 192.168.0.15; }

 

2weight 

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 

情况。

upstream backserver { server 192.168.0.14 weight=3; server 192.168.0.15 weight=7; }

权重越高,在被访问的概率越大,如上例,分别是30%70%

4fair(第三方) 

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver { server server1; server server2; fair; }

 

5url_hash(第三方) 

按访问urlhash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }

 

每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载 

2.weight 默认为1.weight越大,负载的权重就越大。 

3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误 

4.fail_timeout:max_fails次失败后,暂停的时间。 

5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

 

今天完成的事情:把前面的redis数据的缓存和数据的获取的问题,开始的list的集合的储存和json的数据的储存,开始测试的返回的数据,在开始不熟悉,到后面慢慢的熟悉,中间还是做了一些没有用的事情,通过快两周的学习的bug和类,充分了解到Objectlist 还有ValueWrapper的几个数据类型之间,强转有时候不能实现,还有从服务器返回的数据(redis),类型不同不能展示

 

今天遇到的困难:就是那个listObject的类的转换的问题,最后还是从新编写基础的的list的类,再来让查询的接口层调用,最后才解决,开始准备就是简单的强转,强转类不行

今天的收获:还是有充分了解了Object的类和list的类型的区别,开始觉得强转是可以的,但是获取数据有问题

 

加油坚持最久弄redis快疯了<终于解决了>


 



返回列表 返回列表
评论

    分享到