天天看點

java web開發中常用的協定的使用和java-web 常見的緩存技術

一、DNS協定

作用将域名解析為IP   類似于我們隻需要知道中央一台,中央二台,而不需要知道它的頻率,友善記憶。

java dns 域名解析協定實作

1 域名解析,将域名可轉換為ip位址

InetAddress也可以通過使用getAddress()來獲得IP位址,但是它的傳回值是一個4個位元組的數組。

是以盡管getAddress()在獲得IP方面是有用的,但卻不适于用來輸出。

package dns;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Enumeration;
 import javax.comm.CommPortIdentifier;
 import javax.comm.SerialPort;
 public class NsLookup {

 public static void main(String[] args){
 InetAddress address=null;
 try {
     address = InetAddress.getByName(args[0]);
 } catch (UnknownHostException e) {
      e.printStackTrace();
 } 
 System.out.println(args[0]+": "+address.getHostAddress()); //args[0]是執行程式時寫的參數,
 InetAddress localhost=null;
 try { 
    localhost = InetAddress.getLocalHost(); //本地位址
 } catch (UnknownHostException e) {
      e.printStackTrace();
 } 
 System.out.println("localhost:ip address "+localhost.getHostAddress());
 System.out.println("localhost:主機名: "+localhost.getHostName());
 /* *  在開始使用RS232端口通訊之前,我們想知道系統有哪些端口是可用的,以下代碼列出系統中所有可用的RS232端口
 */ 
 CommPortIdentifier portId;
 Enumeration en = CommPortIdentifier.getPortIdentifiers();
 while (en.hasMoreElements()) {
   portId = (CommPortIdentifier) en.nextElement();
   if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
       System.out.println(portId.getName());
    }
 }
 }
 }      

執行時指令行參數如果輸入:www.sina.com

執行結果如下: 

www.sina.com: 121.194.0.209

localhost:ip address 59.64.158.214

localhost:主機名: bupt

COM1 

COM2 

還有一個域名可能對應不止一個ip位址,一下程式時列舉出sina域名下的所有ip

package dns;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 //有時一個域名會包含不止一個IP位址,比如微軟的Web伺服器,這是為了保持負載平衡。
 //InetAddress提供了一種可以得到一個域名的所有IP位址的方法
 public class NsLookup2 {   
 static public void main(String[] args) {
 try { 
 String name = args[0];
 InetAddress[] addresses = InetAddress.getAllByName(name);
 for (int i = 0; i < addresses.length; i++) {
    System.out.println(name + "[" + i + "]: "+ addresses[i].getHostAddress());
 } 
 } catch (UnknownHostException uhe) {
    System.err.println("Unable to find: " + args[0]);
 } } }      

執行結果: www.sina.com[0]: 121.194.0.208

www.sina.com[1]: 121.194.0.209

www.sina.com[2]: 121.194.0.210

www.sina.com[3]: 121.194.0.203

www.sina.com[4]: 121.194.0.205

www.sina.com[5]: 121.194.0.206

二、TCP/IP協定

IP 是用來查找位址,對應網際互連層,

IP 負責計算機之間的通信。

IP 負責在網際網路上發送和接收資料包。

TCP用來規範傳輸規則的對應傳輸層。tcp/ip隻是一套規則,并不能具體工作,就像程式中的接口,socket是這套協定的具體實作。

TCP 用于從應用程式到網絡的資料傳輸控制。

TCP 負責在資料傳送之前将它們分割為 IP 包,然後在它們到達的時候将它們重組。

三、HTTP協定

http是應用層的協定,tcp/ip接受到資料之後通過htp協定來解析。

HTTP 負責 web 伺服器與 web 浏覽器之間的通信。

HTTP 用于從 web 用戶端(浏覽器)向 web 伺服器發送請求,并從 web 伺服器向 web 用戶端傳回内容(網頁)。

http協定中的封包結構很重要。

1:request message  首行,頭部和主體 首行包括請求類型(get,head,post,put,delete),urL 和http版本

2:response 首行包括狀态行,狀态碼(1XX, 2xx成功狀态嗎,3xx重定向狀态嗎,4xx:用戶端狀态嗎,為請求到資源,5xx伺服器端錯誤碼,500内部錯誤),簡短原因,http版本

四、servlet

是j2ee标準的一部分,是java web 開發的标準,

servlet 是對接收到的資料進行處理并生成結果。

五、SMTP - 簡易郵件傳輸協定(Simple Mail Transfer Protocol)

SMTP 用于電子郵件的傳輸。

六、IMAP - 網際網路消息通路協定(Internet Message Access Protocol)

IMAP 用于存儲和取回電子郵件。

七、FTP - 檔案傳輸協定(File Transfer Protocol)

FTP 負責計算機之間的檔案傳輸。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

開發中常使用緩存中間件:redis、memcahed、ehcache;

* 緩存:其實就是記憶體中的一塊空間.可以使用緩存将資料源中的資料拿到,存入到記憶體中.後期獲得資料的話 從緩存中進行獲得.

* 常見歡送有以下幾種

1.EHCache         :是Hibernate常使用的二級緩存的插件.

參考https://elim.iteye.com/blog/2123030

 a、引入依賴

<!-- Spring Boot 緩存支援啟動器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <!-- Ehcache 坐标 -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>      

b、開啟基于注解的緩存 @EnableCaching

java web開發中常用的協定的使用和java-web 常見的緩存技術

c、建立Ehcache的配置檔案

檔案名:ehcache.xml

位置:src/main/resources/ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    
    <diskStore path="java.io.tmpdir" />
    <!--defaultCache:echcache 的預設緩存政策 -->
    <defaultCache 
            maxElementsInMemory="10000" 
            eternal="false"
            timeToIdleSeconds="120" 
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000" 
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap" />
    </defaultCache>
    
    <!-- 自定義緩存政策 -->
    <cache  name="users" 
            maxElementsInMemory="10000" 
            eternal="false"
            timeToIdleSeconds="120" 
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000" 
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap" />
    </cache>
</ehcache>      

d、建立application.properties檔案(mysql與springDateJpa相關配置)

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo01?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true      
spring.cache.ehcache.config=ehcache.xml      
java web開發中常用的協定的使用和java-web 常見的緩存技術

MySql在高版本需要指明是否進行SSL連接配接,這裡因為自己的資料庫安裝的是mysql8.0是以需要加上這個東西,如果用的是mysql5點幾版本的朋友可以自行忽略…

SSL協定,目前版本為3.1(SSL3.1就是TLS1.0)。它已被廣泛地用于Web浏覽器與伺服器之間的身份認證和加密資料傳輸.它位于TCP/IP協定與各種應用層協定之間,為資料通訊提供安全支援

java web開發中常用的協定的使用和java-web 常見的緩存技術
package com.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.App;
import com.entity.Users;
import com.service.UsersService;

/**
 * UsersService測試
 * 
 * @author Administrator
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class UsersServiceTest {
    @Autowired
    private UsersService usersService;
    
    @Test
    public void addUser() {
        Users users=new Users();
        users.setId(1);
        users.setAddress("蘇站路");
        users.setAge(18);
        users.setName("張三");
        usersService.saveUsers(users);
        System.out.println("執行完畢");
    }
    @Test
    public void testFindUserById() {
        //第一次查詢
        System.out.println(this.usersService.findUserById(1));
        //第二次查詢
        System.out.println(this.usersService.findUserById(1));
    }
}      

測試結果

java web開發中常用的協定的使用和java-web 常見的緩存技術

第二次測試‘’

這裡我們将之前在 UserServiceImpl裡面的 @Cacheable(value = “users”)取消注釋

java web開發中常用的協定的使用和java-web 常見的緩存技術

再次啟動項目測試

java web開發中常用的協定的使用和java-web 常見的緩存技術

第三次測試

修改UsersServiceImpl裡面findUserByPage的方法指定為pageable.pageSize,預設的是pageable

修改測試類

新增方法testFindUserByPage

@Test
public void testFindUserByPage() {
Pageable pageable = new PageRequest(0, 2);
// 第一次查詢
System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());

// 第二次查詢
System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());      

測試結果

java web開發中常用的協定的使用和java-web 常見的緩存技術

第四次測試(清除緩存:@CacheEvict)

首先在UsersServiceTest中添加測試方法testFindAll,代碼如下

@Test
public void testFindAll() {
//第一次查詢
System.out.println(this.usersService.findUserAll().size());
//添加使用者
Users users = new Users();
users.setId(4);
users.setAddress("蘇站路");
users.setAge(18);
users.setName("張三4");
usersService.saveUsers(users);
//第二次查詢
System.out.println(this.usersService.findUserAll().size());
}      

測試結果一:

java web開發中常用的協定的使用和java-web 常見的緩存技術

由于緩存機制的存在,是以資料庫的元素改變了,但是我們用的卻還是之前緩存的内容,很顯然這不合适。如何解決呢,我們修改UsersServiceImpl,在saveUsers上面填上注解@CacheEvict(value=“users”,allEntries=true)

@Override
//@CacheEvict(value="users",allEntries=true) 清除緩存中以users緩存政策緩存的對象
@CacheEvict(value="users",allEntries=true)
public void saveUsers(Users users) {
this.usersRepository.save(users);
}      

再次測試,結果如下:

java web開發中常用的協定的使用和java-web 常見的緩存技術

2.Memcache       :

3.Redis                :

轉載于:https://www.cnblogs.com/h-c-g/p/11083834.html