淘淘商城第七天笔记.docx
- 文档编号:10787155
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:31
- 大小:404.96KB
淘淘商城第七天笔记.docx
《淘淘商城第七天笔记.docx》由会员分享,可在线阅读,更多相关《淘淘商城第七天笔记.docx(31页珍藏版)》请在冰豆网上搜索。
淘淘商城第七天笔记
淘淘商城第七天
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对象
Set
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 publicList //添加缓存 //查询数据库之前先查询缓存,如果有直接返回 try{ //从redis中取缓存数据 Stringjson=jedisClient.hget(REDIS_CONTENT_KEY,cid+""); if(! StringUtils.isBlank(json)){ //把json转换成List List returnlist; } }catch(Ex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 淘淘 商城 七天 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)