此文已由作者赵计刚授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


3.3、ssmm0-data

结构:

3.3.1、pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">4 5     <modelVersion>4.0.0</modelVersion>6 7     <!-- 指定父模块 -->8     <parent>9         <groupId>com.xxx</groupId>
10         <artifactId>ssmm0</artifactId>
11         <version>1.0-SNAPSHOT</version>
12     </parent>
13
14     <groupId>com.xxx.ssmm0</groupId>
15     <artifactId>ssmm0-data</artifactId>
16
17     <name>ssmm0-data</name>
18     <packaging>jar</packaging><!-- 只是作为其他模块使用的工具 -->
19
20     <!-- 引入实际依赖 -->
21     <dependencies>
22         <!-- mysql -->
23         <dependency>
24             <groupId>mysql</groupId>
25             <artifactId>mysql-connector-java</artifactId>
26         </dependency>
27         <!-- 数据源 -->
28         <dependency>
29             <groupId>org.apache.tomcat</groupId>
30             <artifactId>tomcat-jdbc</artifactId>
31         </dependency>
32         <!-- mybatis -->
33         <dependency>
34             <groupId>org.mybatis</groupId>
35             <artifactId>mybatis</artifactId>
36         </dependency>
37         <dependency>
38             <groupId>org.mybatis</groupId>
39             <artifactId>mybatis-spring</artifactId>
40         </dependency>
41         <!-- servlet --><!-- 为了会用cookie -->
42         <dependency>
43             <groupId>javax.servlet</groupId>
44             <artifactId>javax.servlet-api</artifactId>
45         </dependency>
46         <!-- bc-加密 -->
47         <dependency>
48             <groupId>org.bouncycastle</groupId>
49             <artifactId>bcprov-jdk15on</artifactId>
50         </dependency>
51         <!-- cc加密 -->
52         <dependency>
53             <groupId>commons-codec</groupId>
54             <artifactId>commons-codec</artifactId>
55         </dependency>
56         <!-- guava cache -->
57         <dependency>
58             <groupId>com.google.guava</groupId>
59             <artifactId>guava</artifactId>
60             <version>14.0.1</version>
61         </dependency>
62         <!-- 引入自定义cache模块 -->
63         <dependency>
64             <groupId>com.xxx.ssmm0</groupId>
65             <artifactId>ssmm0-cache</artifactId>
66             <version>1.0-SNAPSHOT</version>
67         </dependency>
68     </dependencies>
69 </project>

说明:只引入了上边的ssmm0-cache模块。

3.3.2、Admin

 1 package com.xxx.model.userManagement;2 3 import java.io.Serializable;4 5 import com.alibaba.fastjson.JSON;6 7 /**8  * 管理员 9  * 这里序列化,是为了向xmemcached中存储,否则会报异常;
10  * 当然除了用序列化之外,还可以将admin对象转化为json串,然后进行存储
11  */
12 public class Admin implements Serializable{
13
14     private static final long serialVersionUID = 7149009421720474527L;
15
16     private int id;
17     private String username;
18     private String password;
19
20     public int getId() {
21         return id;
22     }
23
24     public void setId(int id) {
25         this.id = id;
26     }
27
28     public String getUsername() {
29         return username;
30     }
31
32     public void setUsername(String username) {
33         this.username = username;
34     }
35
36     public String getPassword() {
37         return password;
38     }
39
40     public void setPassword(String password) {
41         this.password = password;
42     }
43
44     //将json串转为Admin
45     public static Admin parseJsonToAdmin(String jsonStr){
46         try {
47             return JSON.parseObject(jsonStr, Admin.class);
48         } catch (Exception e) {
49             e.printStackTrace();
50             return null;
51         }
52     }
53
54     //将当前实例转化为json串
55     public String toJson(){
56         return JSON.toJSONString(this);
57     }
58 }

说明:这里只添加了让该类实现java.io.Serializable接口,添加了序列号

注意:在实际使用中,把对象存入缓存有两种方式

  • 序列化:使用上述的方式,或者使用其他序列化方式

  • 将对象转化为json串,在该类中,有两个方法:一个将Admin-->Json,一个将Json-->Admin

这两种方式都可以,只是Java默认的序列化效率低且生成的码流大,但是使用方便,当然第二种方式使用也相当简单。

关于各种序列化的方式以及优缺点对比,查看《netty权威指南(第2版)》,或者查看我的"Java高效使用"系列的后续文章

3.3.3、AdminMapper

1     /**************memcached**************/
2
3     @Select("SELECT * FROM userinfo WHERE id = #{id}")
4     @Results(value = {
5             @Result(id = true, column = "id", property = "id"),
6             @Result(column = "username", property = "username"),
7             @Result(column = "password", property = "password") })
8     public Admin selectById(@Param("id") int id);

说明:添加了上述按照ID查找用户的方法。

3.3.4、AdminDao

1     /******************memcached********************/
2     public Admin getUserById(int id){
3         return adminMapper.selectById(id);
4     }

说明:添加了上述方法。

3.3.5、AdminService

 1     /*********************memcached********************/2     public Admin findAdminById(int id) {3         //从缓存中获取数据4         Admin admin = (Admin)MemcachedUtil.getCache(CachePrefix.USER_MANAGEMENT, String.valueOf(id));5         //若缓存中有,直接返回6         if(admin != null){7             return admin;8         }9         //若缓存中没有,从数据库查询
10         admin = adminDao.getUserById(id);
11         //若查询出的数据不为null
12         if(admin!=null){
13             //将数据存入缓存
14             MemcachedUtil.setCacheWithNoReply(CachePrefix.USER_MANAGEMENT, String.valueOf(id), admin);
15         }
16         //返回从数据库查询的admin(当然也可能数据库中也没有,就是null)
17         return admin;
18     }

说明:添加了上述方法。

注意:

上述方法是缓存使用中最常见的模式,即"从缓存获取-->若没有,从数据库查询,存入缓存-->返回数据",这就是guava cache的get(Object key)使用一个方法完成的原子操作。

3.4、ssmm0-userManagement

在该模块中,只在一个类中添加了一个方法。

AdminController.java

1     /**
2      * 根据id查找Admin
3      */
4     @ResponseBody
5     @RequestMapping("/findAdminById")
6     public Admin findAdminById(@RequestParam(value="id") int id){
7
8         return adminService.findAdminById(id);
9     }

说明:下边这个方法就是该模块中唯一添加的一个方法。

4、测试

在浏览器输入"localhost:8080/ssmm0-userManagement/admin/findAdminById?id=1",这样就可以测试缓存,具体测试方式看《第七章 企业项目开发--本地缓存guava cache》

这里要说明的是两点:

  • 由于在根pom.xml文件中将dev改成了服务器启动后默认使用的环境,所以在之后的测试中,不需要再修改环境了,但是实际上线时,一定要将prod改成默认环境才行

  • 我想在上述URL中不输入项目名ssmm0-userManagement也可以访问相关资源,使用如下方式:run as-->run configurations..-->Context参数改为"/"即可

关于memcached的相关内容和Xmemcached的相关内容,请参看下边链接或者我的"Java缓存相关"的后续文章:

http://code.google.com/p/memcached/wiki/NewStart?tm=6

https://code.google.com/p/xmemcached/wiki/User_Guide_zh

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击。

相关文章:
【推荐】 知物由学|AI时代,那些黑客正在如何打磨他们的“利器”?(二)

转载于:https://www.cnblogs.com/163yun/p/10136562.html

企业项目开发--分布式缓存memcached(3)相关推荐

  1. .NET分布式缓存Memcached测试体验

    一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,今天测试下分布式缓存Memcached 首先要在缓存服务器上安装安装:memcached(1. ...

  2. 分布式缓存-Memcached

    分布式缓存-Memcached (2012-03-29 17:01:09)     分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障 ...

  3. 分布式缓存memcached

    Memcached是一款开源.高性能.分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对数据库的访问来加速web应用程序.它是一个基于内存的"键值对"存储,用 ...

  4. ITOO4.1之缓存—分布式缓存Memcached学习(理论篇)

    1.   何为缓存?     缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快 ...

  5. 企业项目开发--切分配置文件

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本章内容在第三章<Java框架整合--企业中的项目架构以及多环境分配>的代码上做修改,链接如下: ...

  6. 第四章 企业项目开发--切分配置文件

    本章内容在第三章<Java框架整合--企业中的项目架构以及多环境分配>的代码上做修改,链接如下: http://www.cnblogs.com/java-zhao/p/5115136.ht ...

  7. 分布式缓存Memcached之Java使用篇

    一.Memcache的客户端类型: 1.   官方提供的基于传统阻塞io由Greg Whalin维护的客户端 https://github.com/gwhalin/Memcached-Java-Cli ...

  8. 设计一个串口服务器设备.《需求分析报告》,《项目开发,分布式多串口交换服务器的设计与实现...

    摘要: 随着信息技术和物联网技术的迅猛发展,TCP/IP网络应用呈现白热化趋势,各种以TCP/IP网络为主的通信设备已经成为主流,网络似乎无处不在.这种局面使得传统的以串行通信为主要通信方式的设备逐渐 ...

  9. 企业项目开发--企业中的项目架构以及多环境分配(2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2.2.2.ssmm0-data pom.xml <?xml version="1.0&qu ...

最新文章

  1. Java使用Lettuce操作redis
  2. 印度视觉设计师Rishab平面设计作品,简直太美了!
  3. linux命令查看几位,Linux每周几个命令(一)--查找篇
  4. 【图论】【二叉树】以先序字符串方式建立二叉树
  5. Qt学习笔记之QString
  6. ADO.net商机题目
  7. Spring开启注解AOP的支持放置的位置
  8. jdk1.7的新特性
  9. Python错误:'tuple' object is not callable
  10. Scratch可视化的编程工具
  11. 大数据做基础 构建流动人口健康屏障
  12. DS1302时钟模块通信原理(SPI总线)
  13. oracle roseha 配置,RoseHA8.5 for Windows Oracle11g配置文档
  14. win10显示未插入扬声器或耳机的解决方案
  15. Windows 7装机必备 - 主流品牌驱动大集合
  16. STM32标准库与HAL库全系列下载地址
  17. 基于jsp的实验室预约管理系统的设计与实现
  18. fatal:unable to create “D:/“ file existsanother git process seems to be running in this repository
  19. 一个HR工资变化,网友直呼太假了
  20. AutoCad相关知识:acdb和acge

热门文章

  1. 实验一、词法分析实验
  2. oracle归档日志写满错误解决方法
  3. AJAX相关JS代码片段和部分浏览器模型
  4. 【JVM】JVM系列之JVM体系(一)
  5. 使用密钥验证方式登录linux系统
  6. HDU 2704 Bulletin Board
  7. php windows 编译,Windows编译PHP7.2拓展
  8. awk 分隔符_awk命令使用实例
  9. 大专学java还是python_零基础应该选择学习 java、php、前端 还是 python?
  10. MFC消息响应函数OnPaint