深入理解Spring Redis的使用(2)

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.cn.redis2.dao.IncrDao;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class TestRedis {
    @Resource(name = "redisTemplate")
    private RedisTemplate<String, String> template; // inject the template as ListOperations
    //至于这个为什么可以注入。需要参考AbstractBeanFactory doGetBean
    //super.setValue(((RedisOperations) value).opsForValue());就这一行代码  依靠一个editor
    @Resource(name = "redisTemplate")
    private ValueOperations<String, Object> vOps;
   
    public void testSet(){
        template.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                byte [] key = "tempkey".getBytes();
                byte[] value = "tempvalue".getBytes();
                connection.set(key, value);
                return true;
            }
        });
    }
   
    public void testSet1(){
        vOps.set("tempkey", "tempvalue");
    }
   
    @Autowired
    private IncrDao incr;
   
   
    @Test
    public void addLink() {
        System.out.println(incr.incr(13));
        System.out.println(incr.get(13));
    }
   
}

这个是对String类型插入的两个测试。test方法中,使用了模版类提交回调(RedisCallBack)的方法来使用jedis connection操作数据。这一部分,有没有似曾相识呢?

HibernateTemplate的HibernateCallback,以及Hibernate Session类中的doWork以及doReturningWork方法,都是使用了这样的机制,方便对于连接或者session的统一管理。

public int excuteHqlUpdate(final String hql,final Object ...params){
        return getHibernateTemplate().executeWithNativeSession(new HibernateCallback<Integer>() {
            @Override
            @SuppressWarnings("unchecked")
            public Integer doInHibernate(Session session) throws HibernateException {
                Query queryObject = session.createQuery(hql);
                if (params != null) {
                    for (int i = 0; i < params.length; i++) {
                        queryObject.setParameter(i, params[i]);
                    }
                }
                return queryObject.executeUpdate();
            }
        });
    }

4. 总结

我们这节,讲了spring redis的配置使用,基本特性,以及引入使用RedisTemplate。通过之前HibernateTemplate的对比,也应该对RedisTemplate的基本设计有了一定的了解。下节,我们将进行深入学习RedisTempalte。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b56b689736ba41cbc9a50686d7c382c3.html