redis-java中的callback回掉机制

本文介绍如何在SpringBoot项目中通过Callback机制操作Redis,包括设置、获取和删除数据等核心功能,并提供了具体的实现代码。

springboot整合redis后, 会提供StringRedisTEmplate和 RedisTemplate 两个模板类供食用, 有时候这并不能满足我们的需求, 需要使用 connect 处理, 除了 redisTemplate.getConnection() 之外, 还可以使用callback机制进行处理

具体使用: 

 @Resource(name = "shardedJedisPool")  
    private ShardedJedisPool shardedJedisPool;  
      
    @Override  
    public <T> T execute(ConnectionCallback<T> action) {  
        ShardedJedis shardedJedis = null;  
        try{  
            // 从连接池中获取jedis分片对象  
            shardedJedis = shardedJedisPool.getResource();  
              
            return action.doInRedis(shardedJedis);  
              
        }catch (Exception e){  
            System.out.println(e.getMessage());  
        }finally {  
            if(null != shardedJedis){  
                shardedJedis.close();  
            }  
        }  
        return null;  
    }  
      
   /** 
     * attention:真正封装的方法,非常的简洁干脆 
     */  
    public String set(final String key, final String value){  
        return execute(new ConnectionCallback<String>() {  
            @Override  
            public String doInRedis(  
                    ShardedJedis shardedJedis) {  
                return shardedJedis.set(key, value);  
            }  
        });  
    }  
      
    public String get(final String key){  
        return execute(new ConnectionCallback<String>(){  
            @Override  
            public String doInRedis(ShardedJedis shardedJedis) {  
                return shardedJedis.get(key);  
            }  
        });  
    }  

保存: 

 redisTemplate.execute(new RedisCallback<Object>() {  
        @Override  
        public Object doInRedis(RedisConnection connection)  
                throws DataAccessException {  
            connection.set(  
                    redisTemplate.getStringSerializer().serialize(  
                            "user.uid." + user.getUid()),  
                    redisTemplate.getStringSerializer().serialize(  
                            user.getAddress()));  
            return null;  
        }  
    });  

获取: 

 return redisTemplate.execute(new RedisCallback<User>() {  
        @Override  
        public User doInRedis(RedisConnection connection)  
                throws DataAccessException {  
            byte[] key = redisTemplate.getStringSerializer().serialize(  
                    "user.uid." + uid);  
            if (connection.exists(key)) {  
                byte[] value = connection.get(key);  
                String address = redisTemplate.getStringSerializer()  
                        .deserialize(value);  
                User user = new User();  
                user.setAddress(address);  
                user.setUid(uid);  
                return user;  
            }  
            return null;  
        }  
    });  

删除: 

  redisTemplate.execute(new RedisCallback<Object>() {  
        public Object doInRedis(RedisConnection connection) {  
            connection.del(redisTemplate.getStringSerializer().serialize(  
                    "user.uid." + uid));  
            return null;  
        }  
    });  

 

 

说实话, 不知道比redistemplate 优在哪.. 有知道的可以跟我说下

 

转载于:https://www.cnblogs.com/wenbronk/p/6999771.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值