昨天看了redis的一些教程,所以现在找来了,redis的实现代码,更加进一步的加深对redis教程的理解
首先是redis的配置,需要在application.properties中定义
## Redis 配置
## Redis数据库索引(默认为0)
spring.redis.database=0
## Redis服务器地址
spring.redis.host=127.0.0.1
## 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
然后我们这里先是手动引入配置
package com.wl.redis.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @Author: wl
* @Description:
* @Date:Create in 2017/11/23-16:46
*/
@Configuration
public class RedisConfig {
/**
* 注入RedisConnectionFactory
*/
@Autowired
RedisConnectionFactory redisConnectionFactory;
/**
* 实例化 RedisTemplate对象
*/
@Bean
public RedisTemplate<String,Object> functionDomainRedisTemplate(){
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate,redisConnectionFactory);
return redisTemplate;
}
/**
* 设置数据存入 redis的序列化方式
*/
private void initDomainRedisTemplate(RedisTemplate<String,Object> redisTemplate, RedisConnectionFactory factory){
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(factory);
}
/**
* 实例化 HashOperations 对象,可以使用Hash类型操作
*/
@Bean
public HashOperations<String,String,Object> hashOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForHash();
}
/**
* 实例化ListOperations 对象,可以用List类型操作
*/
@Bean
public ListOperations<String,Object> listOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForList();
}
/**
* 实例化 ValueOperations 对象,可以用String类型操作
*/
@Bean
public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForValue();
}
/**
* 实例化 SetOperations 对象,可以用set类型操作
*/
@Bean
public SetOperations<String,Object> setOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForSet();
}
/**
* 实例化 ZSetOperations 对象,可以用ZSet操作
*/
@Bean
public ZSetOperations<String,Object> zSetOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForZSet();
}
}
之后编写redis的service
package com.wl.redis.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @Author: wl
* @Description:
* @Date:Create in 2017/11/23-17:14
*/
public abstract class RedisService<T> {
@Autowired
protected RedisTemplate<String, Object> redisTemplate;
@Resource
protected HashOperations<String, String, T> hashOperations;
/**
* 存入redis中的key
*
* @return
*/
protected abstract String getRedisKey();
/**
* 添加
*
* @param key key
* @param doamin 对象
* @param expire 过期时间(单位:秒),传入 -1 时表示不设置过期时间
*/
public void put(String key, T doamin, long expire) {
hashOperations.put(getRedisKey(), key, doamin);
if (expire != -1) {
redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS);
}
}
/**
* 删除
*
* @param key 传入key的名称
*/
public void remove(String key) {
hashOperations.delete(getRedisKey(), key);
}
/**
* 查询
*
* @param key 查询的key
* @return
*/
public T get(String key) {
return hashOperations.get(getRedisKey(), key);
}
/**
* 获取当前redis库下所有对象
*
* @return
*/
public List<T> getAll() {
return hashOperations.values(getRedisKey());
}
/**
* 查询查询当前redis库下所有key
*
* @return
*/
public Set<String> getKeys() {
return hashOperations.keys(getRedisKey());
}
/**
* 判断key是否存在redis中
*
* @param key 传入key的名称
* @return
*/
public boolean isKeyExists(String key) {
return hashOperations.hasKey(getRedisKey(), key);
}
/**
* 查询当前key下缓存数量
*
* @return
*/
public long count() {
return hashOperations.size(getRedisKey());
}
/**
* 清空redis
*/
public void empty() {
Set<String> set = hashOperations.keys(getRedisKey());
set.stream().forEach(key -> hashOperations.delete(getRedisKey(), key));
}
}
然后是他的实现方法,我们需要引入这个service
package com.wl.redis.service.impl;
import com.wl.redis.entity.City;
import com.wl.redis.service.RedisService;
import org.springframework.stereotype.Service;
/**
* @Author: wl
* @Description:
* @Date:Create in 2017/11/23-17:17
*/
@Service
public class RedisServiceImpl extends RedisService<City> {
private static final String REDIS_KEY = "TEST_REDIS_KEY";
@Override
protected String getRedisKey() {
return this.REDIS_KEY;
}
}
最后是我们需要测试的控制层
package com.wl.redis.controller;
import com.wl.redis.entity.City;
import com.wl.redis.service.impl.RedisServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author: wl
* @Description:
* @Date:Create in 2017/11/24-10:47
*/
@Controller
public class TestController {
@Autowired
private RedisServiceImpl service;
//添加
@RequestMapping(value = "/add", method = RequestMethod.GET)
@ResponseBody
public void test() {
System.out.println("start.....");
City city=new City();
city.setCityName("zhangsanKey01");
city.setId(2);
city.setProvinceId(3);
city.setDescription("ASdasd");
service.put(city.getCityName(), city, -1);
City city2=new City();
city2.setCityName("zhangsanKey02");
city2.setId(3);
city2.setProvinceId(3);
city2.setDescription("ASdasd");
service.put(city2.getCityName(), city2, -1);
City city3=new City();
city3.setCityName("zhangsanKey03");
city3.setId(4);
city3.setProvinceId(3);
city3.setDescription("ASdasd");
service.put(city3.getCityName(), city3, -1);
System.out.println("add success end...");
}
//查询所有对象
@RequestMapping(value = "/getAll", method = RequestMethod.GET)
@ResponseBody
public Object getAll() {
return service.getAll();
}
//查询所有key
@RequestMapping(value = "/getKeys", method = RequestMethod.GET)
@ResponseBody
public Object getKeys() {
return service.getKeys();
}
//根据key查询
@RequestMapping(value = "/get", method = RequestMethod.GET)
@ResponseBody
public Object get() {
City city=new City();
city.setCityName("zhangsanKey01");
return service.get(city.getCityName());
}
//删除
@RequestMapping(value = "/remove", method = RequestMethod.GET)
@ResponseBody
public void remove() {
City city=new City();
city.setCityName("zhangsanKey01");
service.remove(city.getCityName());
}
//判断key是否存在
@RequestMapping(value = "/isKeyExists", method = RequestMethod.GET)
@ResponseBody
public void isKeyExists() {
City city=new City();
city.setCityName("zhangsanKey01");
boolean flag = service.isKeyExists(city.getCityName());
System.out.println("zhangsanKey01 是否存在: "+flag);
}
//查询当前缓存的数量
@RequestMapping(value = "/count", method = RequestMethod.GET)
@ResponseBody
public Object count() {
return service.count();
}
//清空所有key
@RequestMapping(value = "/empty", method = RequestMethod.GET)
@ResponseBody
public void empty() {
service.empty();
}
}
将之前的redisservice引入。
以上只是redis的具体实现步骤。
接下来我要学习的是开发中的redis如何使用
&spm=1001.2101.3001.5002&articleId=78623941&d=1&t=3&u=7b4cc24ad3a8474db27997f9972be098)
1万+

被折叠的 条评论
为什么被折叠?



