欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring集成Redis詳解代碼示例

 更新時(shí)間:2017年11月15日 17:24:22   作者:yangkang029  
這篇文章主要介紹了Spring集成Redis詳解代碼示例,介紹了Eclipse工程結(jié)構(gòu),POM依賴,Spring配置,Redis配置信息以及Java代碼等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。

本文章從頭開始介紹Spring集成Redis的示例。

Eclipse工程結(jié)構(gòu)

如下圖為我的示例工程的結(jié)構(gòu)圖,采用Maven構(gòu)建。其中需要集成Spring,因此需要beans.xml文件配置spring的依賴注入,redis.properties配置連接服務(wù)器的配置信息。

其中工程中beans.xml和redis.properties文件直接放在了根目錄,有需要的讀者可以放到resource目錄中。

POM依賴

如下為示例POM依賴,Spring集成redis需要依賴的包為:jedis包,spring-context模塊及依賴的包,spring-data-redis模塊包,spring-test包用于JUnit測(cè)試,pom.xml文件內(nèi)容如下:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelversion>4.0.0</modelversion>
 
  <groupid>com.test</groupid>
  JavaTest</artifactid>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>JavaTest</name>
  <url>https://maven.apache.org</url>
 
  <properties>
    <project.build.sourceencoding>UTF-8</project.build.sourceencoding>
  </properties>
 
  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      junit</artifactid>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupid>redis.clients</groupid>
      jedis</artifactid>
      <version>2.5.1</version>
    </dependency>
    <dependency>
      <groupid>org.springframework</groupid>
      spring-context</artifactid>
      <version>4.2.6.RELEASE</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupid>org.springframework</groupid>
      spring-test</artifactid>
      <version>4.2.6.RELEASE</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupid>org.springframework.data</groupid>
      spring-data-redis</artifactid>
      <version>1.7.2.RELEASE</version>
    </dependency>
  </dependencies>
</project>

Spring配置

Spring配置文件beans.xml的配置如下:

<!--?xml version="1.0" encoding="UTF-8"?--> 
<beans xmlns="https://www.springframework.org/schema/beans" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:context="https://www.springframework.org/schema/context" xmlns:jee="https://www.springframework.org/schema/jee" xmlns:p="https://www.springframework.org/schema/p" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation=" 
      https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd 
      https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> 
  <!-- 加載classpath下的Redis配置文件 -->
  <context:property-placeholder location="classpath:redis.properties">
 
  <bean class="redis.clients.jedis.JedisPoolConfig" id="poolConfig"> 
    <property name="maxIdle" value="${redis.maxIdle}">
    <property name="testOnBorrow" value="${redis.testOnBorrow}">
  </property></property></bean> 
 
  <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" id="connectionFactory" p:host-name="${redis.host}" p:password="${redis.pass}" p:pool-config-ref="poolConfig" p:port="${redis.port}"> 
 
  <!-- spring提供的模板類 -->
  <bean class="org.springframework.data.redis.core.StringRedisTemplate" id="redisTemplate"> 
    <property name="connectionFactory" ref="connectionFactory">
  </property></bean>
 
  <bean class="com.redis.test.UserDao" id="userDao">
    <property name="redisTemplate" ref="redisTemplate"> 
  </property></bean>
 
</bean></context:property-placeholder></beans>

在beans.xml配置文件中,需要先加載redis.properties文件。

Redis配置信息

Redis的配置信息在redis.properties文件中配置:

# Redis地址和端口和連接密碼
redis.host=localhost
redis.port=6379
redis.pass=
 
redis.maxIdle=300
redis.testOnBorrow=true

此示例,連接Redis服務(wù)器時(shí)沒有設(shè)置連接密碼,因此不用填值。

Java代碼

User.java

package com.redis.test;
import java.io.Serializable;
public class User implements Serializable {
	private static final long serialVersionUID = 3409768855488864675L;
	private String id;
	private String name;
	private String password;
	public User() {
	}
	public User(String id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
	}
}

AbstractRedisBaseDao.java

package com.redis.test;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
public abstract class AbstractRedisBaseDao<k, v=""> {
  protected RedisTemplate<k, v=""> redisTemplate;
public RedisTemplate<k, v=""> getRedisTemplate() {
	return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<k, v=""> redisTemplate) {
	this.redisTemplate = redisTemplate;
}
/**
   * 獲取 RedisSerializer
   */
protected RedisSerializer<string> getRedisSerializer() {
	return redisTemplate.getStringSerializer();
}
}

IUserDao.java

package com.redis.test;
import java.util.List;
public interface IUserDao {
	/** 新增 */
	Boolean add(User user);
	/** 批量新增,pipeline方式 */
	Boolean add(List<user> list);
	/** 刪除 */
	void delete(String key);
	/** 批量刪除 */
	void delete(List<string> keys);
	/** 更新 */
	Boolean update(User user);
	/** 讀取 */
	User get(String keyId);
}

UserDao.java

package com.redis.test;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.util.Assert;
public class UserDao extends AbstractRedisBaseDao<string, user=""> implements IUserDao {
  public Boolean add(final User user) {
	Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
		public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
			RedisSerializer<string> serializer = getRedisSerializer();
			byte[] key = serializer.serialize(user.getId());
			// 將ID序列化成key
			byte[] value = serializer.serialize(user.getName());
			return connection.setNX(key, value);
		}
	}
	);
	return result;
}
public Boolean add(final List<user> list) {
	Assert.notEmpty(list);
	Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
		public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
			RedisSerializer<string> serializer = getRedisSerializer();
			for (int i = 0; i < list.size(); i++) {
				User user = list.get(i);
				byte[] key = serializer.serialize(user.getId());
				// 將ID序列化成key
				byte[] value = serializer.serialize(user.getName());
				connection.setNX(key, value);
			}
			return true;
		}
	}
	, false, true);
	return result;
}
public void delete(String key) {
	redisTemplate.delete(key);
}
public void delete(List<string> keys) {
	redisTemplate.delete(keys);
}
public Boolean update(final User user) {
	String key = user.getId();
	if(get(key) == null) {
		throw new NullPointerException("數(shù)據(jù)行不存在,key = " + key);
	}
	Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
		public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
			RedisSerializer<string> serializer = getRedisSerializer();
			byte[] key = serializer.serialize(user.getId());
			// 將ID序列化成key
			byte[] value = serializer.serialize(user.getName());
			connection.set(key, value);
			return true;
		}
	}
	);
	return result;
}
public User get(final String keyId) {
	User user = redisTemplate.execute(new RedisCallback<user>() {
		public User doInRedis(RedisConnection connection) throws DataAccessException {
			RedisSerializer<string> serializer = getRedisSerializer();
			byte[] key = serializer.serialize(keyId);
			byte[] value = connection.get(key);
			if(value == null) {
				return null;
			}
			String name = serializer.deserialize(value);
			return new User(keyId, name, null);
		}
	}
	);
	return user;
}
}

RedisTest.java(JUnit測(cè)試類)

package com.redis.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.util.Assert;
/**
 * junit在Spring context環(huán)境下測(cè)試
 */
@ContextConfiguration(locations={"classpath*:beans.xml"})
public class RedisTest extends AbstractJUnit4SpringContextTests {
	@Autowired
	  private IUserDao userDao;
	/** 增加單個(gè)用戶 */
	@Test
	  public void testAddUser() {
		User user = new User("user1", "password1", null);
		Boolean result = userDao.add(user);
		Assert.isTrue(result);
		System.out.println("添加結(jié)果:" + result);
	}
	/** 批量新增普通方式,5286ms */
	@Test
	  public void testAddUsers1() {
		List<user> list = new ArrayList<user>();
		for (int i = 10; i < 50000; i++) {
			User user = new User();
			user.setId("user" + i);
			user.setName("password" + i);
			list.add(user);
		}
		long begin = System.currentTimeMillis();
		for (User user : list) {
			userDao.add(user);
		}
		System.out.println(System.currentTimeMillis() - begin);
	}
	/** 批量新增pipeline方式,484ms */
	@Test
	  public void testAddUsers2() {
		List<user> list = new ArrayList<user>();
		for (int i = 50000; i < 100000; i++) {
			User user = new User();
			user.setId("user" + i);
			user.setName("password" + i);
			list.add(user);
		}
		long begin = System.currentTimeMillis();
		Boolean result = userDao.add(list);
		Assert.isTrue(result);
		System.out.println(System.currentTimeMillis() - begin);
	}
	/** 更新 */
	@Test
	  public void testUpdate() {
		User user = new User();
		user.setId("user1");
		user.setName("new_password");
		Boolean result = userDao.update(user);
		Assert.isTrue(result);
	}
	/** 刪除 */
	@Test
	  public void testDelete() {
		String key = "user1";
		userDao.delete(key);
	}
	/** 批量刪除 */
	@Test
	  public void testDeletes() {
		List<string> list = new ArrayList<string>();
		for (int i = 0; i < 10; i++) {
			list.add("user" + i);
		}
		userDao.delete(list);
	}
	/** 讀取 */
	@Test
	  public void testGetUser() {
		String id = "user1";
		User user = userDao.get(id);
		Assert.notNull(user);
		System.out.println(user);
	}
}

總結(jié)

以上就是本文關(guān)于Spring集成Redis詳解代碼示例的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

淺談spring 常用注解

spring中的FactoryBean代碼示例

淺談Spring的兩種配置容器

如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • springboot實(shí)現(xiàn)過濾器的示例代碼

    springboot實(shí)現(xiàn)過濾器的示例代碼

    JavaWeb開發(fā)中,過濾器Filter是三大組件之一,主要用于請(qǐng)求攔截和響應(yīng)處理,如權(quán)限校驗(yàn)、日志記錄、請(qǐng)求過濾等,本文就來介紹一下springboot實(shí)現(xiàn)過濾器的示例代碼,感興趣的可以了解一下
    2024-10-10
  • 詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)

    詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)

    這篇文章主要為大家介紹了詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java設(shè)計(jì)模式之責(zé)任鏈模式的示例詳解

    Java設(shè)計(jì)模式之責(zé)任鏈模式的示例詳解

    責(zé)任鏈模式是將鏈中的每一個(gè)節(jié)點(diǎn)看做是一個(gè)對(duì)象,每個(gè)節(jié)點(diǎn)處理的請(qǐng)求均不相同,且內(nèi)部自動(dòng)維護(hù)下一個(gè)節(jié)點(diǎn)對(duì)象,當(dāng)一個(gè)請(qǐng)求從鏈?zhǔn)降氖锥伟l(fā)出時(shí),會(huì)沿著鏈的路徑依次傳遞給每一個(gè)節(jié)點(diǎn)對(duì)象。本文將通過示例和大家詳細(xì)聊聊責(zé)任鏈模式,需要的可以參考一下
    2022-11-11
  • SpringBoot啟動(dòng)后立即執(zhí)行的幾種方法小結(jié)

    SpringBoot啟動(dòng)后立即執(zhí)行的幾種方法小結(jié)

    在項(xiàng)目開發(fā)中某些場(chǎng)景必須要用到啟動(dòng)項(xiàng)目后立即執(zhí)行方式的功能,本文主要介紹了SpringBoot啟動(dòng)后立即執(zhí)行的幾種方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • jstack配合top命令分析CPU飆高、程序死鎖問題

    jstack配合top命令分析CPU飆高、程序死鎖問題

    記得前段時(shí)間,同事說他們測(cè)試環(huán)境的服務(wù)器cpu使用率一直處于100%,本地又沒有什么接口調(diào)用,為什么會(huì)這樣?cpu使用率居高不下,自然是有某些線程一直占用著cpu資源,那又如何查看占用cpu較高的線程
    2021-09-09
  • springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    這篇文章主要介紹了springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • springMarchal集成xStream的完整示例代碼

    springMarchal集成xStream的完整示例代碼

    這篇文章主要介紹了springMarchal集成xStream的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • java中ExecutorService創(chuàng)建方法總結(jié)

    java中ExecutorService創(chuàng)建方法總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于java中ExecutorService創(chuàng)建方法總結(jié),有興趣的朋友們可以參考下。
    2021-01-01
  • maven-surefire-plugin總結(jié)示例詳解

    maven-surefire-plugin總結(jié)示例詳解

    這篇文章主要介紹了maven-surefire-plugin總結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java 程序員容易犯的10個(gè)SQL錯(cuò)誤

    Java 程序員容易犯的10個(gè)SQL錯(cuò)誤

    本文介紹了Java 程序員容易犯的10個(gè)SQL錯(cuò)誤。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01

最新評(píng)論