一个简单的springboot+redis实例

1.配置文件

#redis默认数据库索引
spring.redis.database=0
#redis服务器地址
spring.redis.host=localhost
#redis服务器连接端口
spring.redis.port=6379
#redis服务器连接密码
spring.redis.password=

2.redis的配置类

Springboot中,配置类前需加上@Configuration和@Enablecaching

/**
        设置数据存入redis的序列化方式
        @Param redisTemplate
        @Param RedisConnectionfactory
     */
    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
    }

 

/**
    注入RedisConnectFactory
     */
    @Autowired
    RedisConnectionFactory factory;

    /**
    实例化RedisTemplate对象
     */
    @Bean
    public RedisTemplate<String,Object> functionDomainRedisTemplate(){
        RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
        initDomainRedisTemplate(redisTemplate,factory);
        return redisTemplate;
    }
/*
        创建Hash键值对的bean使spring能控制对象
     */
    @Bean
    public HashOperations<String,String,Object> hashOperations(RedisTemplate<String,Object> redisTemplate){
        return redisTemplate.opsForHash();
    }
    /*
    创建Value的bean
     */
    @Bean
    public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
        return redisTemplate.opsForValue();
    }
    /*
    创建List的bean,可以进行list一系列操作
     */
    @Bean
    public ListOperations<String,Object> listOperations(RedisTemplate<String,Object> redisTemplate){
        return redisTemplate.opsForList();
    }
    /*
    创建Set的bean,可以进行Set的操作
     */
    @Bean
    public SetOperations<String,Object> setOperations(RedisTemplate<String,Object> redisTemplate){
        return redisTemplate.opsForSet();
    }
    /*
    创建zset的bean,可以进行排序集合的操作
     */
    @Bean
    public ZSetOperations<String,Object> zSetOperations(RedisTemplate<String,Object> redisTemplate){
        return redisTemplate.opsForZSet();
    }

3.创建缓存对象实例,这里以hash类型为例,属性为redisKey,name,tel,address;redisKey为key名,整体实例的后三个属性为value值,实例类继承Serializable接口,可以序列化为流对象进行读写操作

public class RedisModel implements Serializable {
    private String redisKey;
    private String name;
    private String tel;
    private String address;

    /*
    getter and setter
     */
    public String getRedisKey() {
        return redisKey;
    }

    public void setRedisKey(String redisKey) {
        this.redisKey = redisKey;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

4.IRedisService抽象类,对需要用到的服务进行封装

public abstract class IRedisService<T> {
    @Autowired
    RedisTemplate<String,Object> redisTemplate;
    @Resource
    HashOperations<String,String,T> hashOperations;
    /**
        获取存入redis中的key
     */
    protected abstract String getRedisKey();
    /**
        添加键值对信息进hash中
        @Param key hash键名
        @Param domain 对象,类型为Object
        @Param expire 过期时间,若为-1则表示不设置时间
     */
    public void put(String key,T domain,long expire){
        hashOperations.put(getRedisKey(),key,domain);
        if(expire!=-1){
            redisTemplate.expire(key,expire,TimeUnit.SECONDS);
        }
    }
    /**
        删除对应键名的hash
        @Param key
     */
    public void delete(String key){
        hashOperations.delete(getRedisKey(),key);
    }

    /**
        根据键名key查询redis中该hash中的值
     */
    public T get(String key){
        return hashOperations.get(getRedisKey(),key);
    }
    /*
        获取当前redis库中所有对象
     */
    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下缓存数量
     * 即当前hash下面的键值对数量
     * @return
     */
    public long count(){
        return hashOperations.size(getRedisKey());
    }

    /**
     * 清空redis中当前hash的所有键值对
     */
    public void empty(){
        Set<String> set=getKeys();
        for(String s:set){
            delete(s);
        }
    }
}

5.实现抽象类中的getRedisKey方法

@Service
public class IRedisServiceImpl extends IRedisService<RedisModel> {
    private static final String REDIS_KEY="TEST_REDIS_KEY";
    @Override
    public String getRedisKey(){
        return REDIS_KEY;
    }
}

6.在controller中进行测试

@Controller
public class TestController {
    @Autowired
    IRedisService<RedisModel> service;
    //添加
    @RequestMapping(value = "/add", method = RequestMethod.GET)
    @ResponseBody
    public void test() {
        System.out.println("start.....");
        RedisModel m = new RedisModel();
        m.setName("张三");
        m.setTel("1111");
        m.setAddress("深圳1");
        m.setRedisKey("zhangsanKey01");
        service.put(m.getRedisKey(), m, -1);

        RedisModel m2 = new RedisModel();
        m2.setName("张三2");
        m2.setTel("2222");
        m2.setAddress("深圳2");
        m2.setRedisKey("zhangsanKey02");
        service.put(m2.getRedisKey(), m2, -1);

        RedisModel m3 = new RedisModel();
        m3.setName("张三3");
        m3.setTel("2222");
        m3.setAddress("深圳2");
        m3.setRedisKey("zhangsanKey03");
        service.put(m3.getRedisKey(), m3, -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() {
        RedisModel m = new RedisModel();
        m.setRedisKey("zhangsanKey02");
        return service.get(m.getRedisKey());
    }

    //删除
    @RequestMapping(value = "/remove", method = RequestMethod.GET)
    @ResponseBody
    public void remove() {
        RedisModel m = new RedisModel();
        m.setRedisKey("zhangsanKey01");
        service.delete(m.getRedisKey());
    }

    //判断key是否存在
    @RequestMapping(value = "/isKeyExists", method = RequestMethod.GET)
    @ResponseBody
    public void isKeyExists() {
        RedisModel m = new RedisModel();
        m.setRedisKey("zhangsanKey01");
        boolean flag = service.isKeyExists(m.getRedisKey());
        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();
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值