redisTemplate.delete()不能删除元素
伊谢尔伦
伊谢尔伦 2017-04-28 09:03:52
[Redis讨论组]

最近在学习redis,使用spring-data-redis的RedisTemplate.delete()方法删除时,添加是成功的,但是不能删除。

代码如下

public abstract class AbstractBaseRedisDao {
    @Autowired
    protected RedisTemplate redisTemplate;

//    public void setRedisTemplate(RedisTemplate redisTemplate) {
//        this.redisTemplate = redisTemplate;
//    }

    public RedisSerializer getRedisSerializer() {
        return redisTemplate.getStringSerializer();
    }
}

public interface IUserDao {
    boolean add(User user);

    void delete(String key);

    void delete(List keys);

    User get(String keyId);
}

@Service
public class UserDao extends AbstractBaseRedisDao implements IUserDao {
    public boolean add(final User user) {
        boolean result = redisTemplate.execute(new RedisCallback() {
            public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
                RedisSerializer serializer = getRedisSerializer();
                byte[] key = serializer.serialize(user.getId());
                byte[] name = serializer.serialize(user.getName());
                return redisConnection.setNX(key, name);
            }
        });
        return result;
    }

    public void delete(String key) {
        List list = new ArrayList();
        list.add(key);
        delete(list);
    }

    public void delete(List keys) {
        redisTemplate.delete(keys);
    }

    public User get(final String keyId) {
        User result = redisTemplate.execute(new RedisCallback() {
            public User doInRedis(RedisConnection redisConnection) throws DataAccessException {
                RedisSerializer serializer = getRedisSerializer();
                byte[] key = serializer.serialize(keyId);
                byte[] value = redisConnection.get(key);
                if (value == null) {
                    return null;
                }
                String name = serializer.deserialize(value);
                return new User(keyId, name, null);
            }
        });
        return result;
    }
}

配置如下:




    
    
    

    
        
        
        
        
    

    

    
        
    

    

测试用例:

public class RedisTest {
    private IUserDao userDao;

    @Before
    public void init() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("case1/applicationContext.xml");
        userDao = (IUserDao) ctx.getBean("userDao");
    }

    @Test
    public void testAddUser() {
        User user = new User();
        user.setId("B");
        user.setName("B");
        boolean result = userDao.add(user);
        Assert.assertTrue(result);
    }

    @Test
    public void testDelete() {
        String key = "B";
        User user = userDao.get(key);
        System.out.println("删除前:" + user);
        userDao.delete(key);
        user = userDao.get(key);
        System.out.println("删除后:" + user);
    }
}
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
给我你的怀抱

请问解决了吗? 我也遇到这个问题了, 也不报错. 就是没有删除.

我解决了,我的key拼错了.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号