SpringBoot關聯NOSql資料庫 Redis
阿新 • • 發佈:2018-12-07
一,SpringBoot關聯NOSql資料庫 Redis
Redis資料庫安裝 :
Redis資料庫安裝最好是在Linux的環境下,因為Redis資料庫本身開發的軟體只有Linux版本,windows環境下的redis是後期windows開發的,並不是十分的穩定。
安裝十分簡單 : 下載redis的安裝包,將redis的存放路徑在path環境變數中進行配置,以防在doc視窗中顯示非命令錯誤。 執行 redis-server.exe redis.conf 就可以啟動redis (這個視窗不要關) , 開啟新的cmd視窗 , 到reids的存放路徑下操作, 輸入redis-cli.exe -h localhost 沒有錯誤的話就差不多正確了,可以通過set和get命令讀寫看看是否正確地進行了操作! SpringBoot操作Redis資料庫的簡單例項 :
<name>redis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId >
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding >
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 新增redis的依賴jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我在匯入jar包的時候一直出現這個jar包unknow的情況,修改下映象為阿里雲或者別的,或者你可以嘗試修改redis jar包的版本號試試!,一般不會出錯。
在application.properties檔案中新增如下的配置:
# REDIS (RedisProperties)
# Redis資料庫索引(預設為0)
spring.redis.database=0
# Redis伺服器地址
spring.redis.host=localhost
# Redis伺服器連線埠
spring.redis.port=6379
# Redis伺服器連線密碼(預設為空)
spring.redis.password=
# 連線池最大連線數(使用負值表示沒有限制)
spring.redis.pool.max-active=8
# 連線池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連線池中的最大空閒連線
spring.redis.pool.max-idle=8
# 連線池中的最小空閒連線
spring.redis.pool.min-idle=0
# 連線超時時間(毫秒)
spring.redis.timeout=0
test檔案中進行測試:
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void contextLoads() {
//儲存字串
stringRedisTemplate.opsForValue().set("key1","111");
//Assert.assertEquals("111",stringRedisTemplate.opsForValue().get("key1"));
System.out.print(stringRedisTemplate.opsForValue().get("key1"));
}
}
StringRedisTemplate物件能夠對Redis進行讀取操作,操作的型別為String,其實是相當於RedisTemplate<String,String>
RedisTemplate物件也能夠對Redis進行操作,操作物件,相當於RedisTemplate<String,Object>
特別需要注意的是: SpringBoot並不支援直接使用物件,這就需要我們自己實現 RedisSerializer<T> 介面來對傳入進來的物件
進行序列化和反序列化操作。
第一步: 建立實體類物件 (省略)
第二步: 實現物件的序列化介面
public class RedisObjectSerializer implements RedisSerializer<Object> {
private Converter<Object, byte[]> serializer = new SerializingConverter();
private Converter<byte[], Object> deserializer = new DeserializingConverter();
static final byte[] EMPTY_ARRAY = new byte[0];
public Object deserialize(byte[] bytes) {
if (isEmpty(bytes)) {
return null;
}
try {
return deserializer.convert(bytes);
} catch (Exception ex) {
throw new SerializationException("Cannot deserialize", ex);
}
}
public byte[] serialize(Object object) {
if (object == null) {
return EMPTY_ARRAY;
}
try {
return serializer.convert(object);
} catch (Exception ex) {
return EMPTY_ARRAY;
}
}
private boolean isEmpty(byte[] data) {
return (data == null || data.length == 0);
}
}
第三步: 配置針對實體類的RedisTemplate例項
@Configuration
public class RedisConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory(){
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, User> redisTemplate( RedisConnectionFactory factory){
RedisTemplate<String, User> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new RedisObjectSerializer());
return template;
}
}
第四步:編寫測試類
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class RedisApplicationTests {
@Autowired
private RedisTemplate<String , User> redisTemplate;
@Test
public void test(){
//儲存物件
User user = new User("liang",22,"男");
redisTemplate.opsForValue().set(user.getName(),user);
user = new User("yunqing", 25,"男");
redisTemplate.opsForValue().set(user.getName(),user);
Assert.assertEquals(20,redisTemplate.opsForValue().get("liang").getName());
}
}