淘淘商城第七天笔记.docx

上传人:b****7 文档编号:10787155 上传时间:2023-02-22 格式:DOCX 页数:31 大小:404.96KB
下载 相关 举报
淘淘商城第七天笔记.docx_第1页
第1页 / 共31页
淘淘商城第七天笔记.docx_第2页
第2页 / 共31页
淘淘商城第七天笔记.docx_第3页
第3页 / 共31页
淘淘商城第七天笔记.docx_第4页
第4页 / 共31页
淘淘商城第七天笔记.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

淘淘商城第七天笔记.docx

《淘淘商城第七天笔记.docx》由会员分享,可在线阅读,更多相关《淘淘商城第七天笔记.docx(31页珍藏版)》请在冰豆网上搜索。

淘淘商城第七天笔记.docx

淘淘商城第七天笔记

淘淘商城第七天

1第六天内容复习

轮播图的展示

1、内容管理的后台。

Cms系统

a)内容分类的管理

b)内容管理,需要指定内容的分类

2、前台展示内容

a)需要服务层发布服务。

b)Portal调用服务获得数据。

c)HttpClient调用服务获得数据。

d)获得数据后,把数据转换成需要的数据格式传递给jsp。

2课程计划

1、在业务逻辑中添加缓存

a)缓存可以使用redis作为缓存。

b)Redis集群

c)在java代码中使用redis单机版、集群版。

d)在业务逻辑中添加缓存。

2、搜索系统的实现

a)创建一个搜索的工程

b)使用solr实现搜索。

c)Solr集群搭建

3缓存的添加

3.1Redis的单机版

3.1.1安装步骤:

第一步:

安装gcc编译环境

yuminstallgcc-c++

第二步:

把redis的源码上传到linux服务器。

第三步:

解压缩。

tar-zxvfredis-3.0.0.tar.gz

第四步:

make

第五步:

makeinstallPREFIX=/usr/local/redis

3.1.2启动redis

两种启动方式,前端启动、后台启动。

前端启动:

./redis-server

后台启动:

1、复制redis.conf到redis的安装目录

2、修改redis.conf。

修改daemonizeyes

3、[root@bogonredis]#./redis-serverredis.conf

3.1.3客户端

redis-cli-p端口-hip地址<-c>连接集群时使用此参数

默认端口:

6379

Ip:

localhost(127.0.0.1)

RedisDesktopManager:

只能在单机版环境使用。

不支持redis集群。

3.2Redis集群

3.2.1redis-cluster架构图

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value

Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点

3.2.2集群搭建

集群中应该至少有三个节点,每个节点有一备份节点。

需要6台服务器。

搭建伪分布式,需要6个redis实例。

搭建集群的步骤:

第一步:

创建6个redis实例指定端口从7001到7006

第二步:

修改redis.conf打开Cluster-enableyes前面的注释。

第三步:

需要一个ruby脚本。

在redis源码文件夹下的src目录下。

redis-trib.rb

第四步:

把redis-trib.rb文件复制到到redis-cluster目录下。

第五步:

执行ruby脚本之前,需要安装ruby环境。

1、yuminstallruby

2、yuminstallrubygems

3、安装redis-trib.rb运行依赖的ruby的包。

[root@bogon~]#geminstallredis-3.0.0.gem

第六步:

启动所有的redis实例。

第七步:

使用redis-trib.rb创建集群。

./redis-trib.rbcreate--replicas1192.168.25.153:

7001192.168.25.153:

7002192.168.25.153:

7003192.168.25.153:

7004192.168.25.153:

7005192.168.25.153:

7006

使用客户端连接集群:

redis01/redis-cli-p7001-c

3.3如何使用redis的java客户端

需要使用Jedis连接redis服务器。

3.3.1连接单机版

先把jedis依赖的jar包添加到工程中。

//单机版测试

@Test

publicvoidtestJedisSingle()throwsException{

//创建一个Jedis对象

Jedisjedis=newJedis("192.168.25.153",6379);

jedis.set("test","hellojedis");

Stringstring=jedis.get("test");

System.out.println(string);

jedis.close();

}

使用连接池:

//使用连接池

@Test

publicvoidtestJedisPool()throwsException{

//创建一个连接池对象

//系统中应该是单例的。

JedisPooljedisPool=newJedisPool("192.168.25.153",6379);

//从连接池中获得一个连接

Jedisjedis=jedisPool.getResource();

Stringresult=jedis.get("test");

System.out.println(result);

//jedis必须关闭

jedis.close();

//系统关闭时关闭连接池

jedisPool.close();

}

3.3.2集群版使用Jedis

//连接redis集群

@Test

publicvoidtestJedisCluster()throwsException{

//创建一个JedisCluster对象

Setnodes=newHashSet<>();

nodes.add(newHostAndPort("192.168.25.153",7001));

nodes.add(newHostAndPort("192.168.25.153",7002));

nodes.add(newHostAndPort("192.168.25.153",7003));

nodes.add(newHostAndPort("192.168.25.153",7004));

nodes.add(newHostAndPort("192.168.25.153",7005));

nodes.add(newHostAndPort("192.168.25.153",7006));

//在nodes中指定每个节点的地址

//jedisCluster在系统中是单例的。

JedisClusterjedisCluster=newJedisCluster(nodes);

jedisCluster.set("name","zhangsan");

jedisCluster.set("value","100");

Stringname=jedisCluster.get("name");

Stringvalue=jedisCluster.get("value");

System.out.println(name);

System.out.println(value);

//系统关闭时关闭jedisCluster

jedisCluster.close();

}

3.4项目中使用jedis

思路:

创建一个redis操作的接口。

分别创建两个实现类对应redis的单机版和集群版。

当使用单机版redis时,配置单机版的实现类,当使用集群版本的时候,配置集群版的实现类。

3.4.1单机版实现类

/**

*redis客户端单机版实现类

*

Title:

JedisClientSingle

*

Description:

*

Company:

*@author入云龙

*@date2015年11月20日上午10:

13:

58

*@version1.0

*/

publicclassJedisClientSingleimplementsJedisClient{

@Autowired

privateJedisPooljedisPool;

@Override

publicStringset(Stringkey,Stringvalue){

Jedisjedis=jedisPool.getResource();

Stringresult=jedis.set(key,value);

jedis.close();

returnresult;

}

@Override

publicStringget(Stringkey){

Jedisjedis=jedisPool.getResource();

Stringresult=jedis.get(key);

jedis.close();

returnresult;

}

@Override

publicLonghset(Stringkey,Stringitem,Stringvalue){

Jedisjedis=jedisPool.getResource();

Longresult=jedis.hset(key,item,value);

jedis.close();

returnresult;

}

@Override

publicStringhget(Stringkey,Stringitem){

Jedisjedis=jedisPool.getResource();

Stringresult=jedis.hget(key,item);

jedis.close();

returnresult;

}

@Override

publicLongincr(Stringkey){

Jedisjedis=jedisPool.getResource();

Longresult=jedis.incr(key);

jedis.close();

returnresult;

}

@Override

publicLongdecr(Stringkey){

Jedisjedis=jedisPool.getResource();

Longresult=jedis.decr(key);

jedis.close();

returnresult;

}

@Override

publicLongexpire(Stringkey,intsecond){

Jedisjedis=jedisPool.getResource();

Longresult=jedis.expire(key,second);

jedis.close();

returnresult;

}

@Override

publicLongttl(Stringkey){

Jedisjedis=jedisPool.getResource();

Longresult=jedis.ttl(key);

jedis.close();

returnresult;

}

}

3.4.2集群版

/**

*redis客户端集群版实现类

*

Title:

JedisClientCluster

*

Description:

*

Company:

*@author入云龙

*@date2015年11月20日上午10:

14:

57

*@version1.0

*/

publicclassJedisClientClusterimplementsJedisClient{

@Autowired

privateJedisClusterjedisCluster;

@Override

publicStringset(Stringkey,Stringvalue){

returnjedisCluster.set(key,value);

}

@Override

publicStringget(Stringkey){

returnjedisCluster.get(key);

}

@Override

publicLonghset(Stringkey,Stringitem,Stringvalue){

returnjedisCluster.hset(key,item,value);

}

@Override

publicStringhget(Stringkey,Stringitem){

returnjedisCluster.hget(key,item);

}

@Override

publicLongincr(Stringkey){

returnjedisCluster.incr(key);

}

@Override

publicLongdecr(Stringkey){

returnjedisCluster.decr(key);

}

@Override

publicLongexpire(Stringkey,intsecond){

returnjedisCluster.expire(key,second);

}

@Override

publicLongttl(Stringkey){

returnjedisCluster.ttl(key);

}

}

3.4.3Spring的配置

xmlversion="1.0"encoding="UTF-8"?

>

//www.springframework.org/schema/beans"

xmlns:

context="http:

//www.springframework.org/schema/context"xmlns:

p="http:

//www.springframework.org/schema/p"

xmlns:

aop="http:

//www.springframework.org/schema/aop"xmlns:

tx="http:

//www.springframework.org/schema/tx"

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans-4.0.xsd

http:

//www.springframework.org/schema/contexthttp:

//www.springframework.org/schema/context/spring-context-4.0.xsd

http:

//www.springframework.org/schema/aophttp:

//www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp:

//www.springframework.org/schema/txhttp:

//www.springframework.org/schema/tx/spring-tx-4.0.xsd

http:

//www.springframework.org/schema/utilhttp:

//www.springframework.org/schema/util/spring-util-4.0.xsd">

--包扫描器,扫描带@Service注解的类-->

component-scanbase-package="com.taotao.rest.service">

component-scan>

--配置redis客户端单机版-->

--配置redis客户端实现类-->

--配置redis客户端集群版-->

--

-->

测试:

@Test

publicvoidtestJedisClientSpring()throwsException{

//创建一个spring容器

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("classpath:

spring/applicationContext-*.xml");

//从容器中获得JedisClient对象

JedisClientjedisClient=applicationContext.getBean(JedisClient.class);

//jedisClient操作redis

jedisClient.set("cliet1","1000");

Stringstring=jedisClient.get("cliet1");

System.out.println(string);

}

3.5业务逻辑中添加缓存

注意:

添加缓存时不要影响正常的业务逻辑。

@Override

publicListgetContentList(Longcid){

//添加缓存

//查询数据库之前先查询缓存,如果有直接返回

try{

//从redis中取缓存数据

Stringjson=jedisClient.hget(REDIS_CONTENT_KEY,cid+"");

if(!

StringUtils.isBlank(json)){

//把json转换成List

Listlist=JsonUtils.jsonToList(json,TbContent.class);

returnlist;

}

}catch(Ex

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1