Redis--使用RedisTemplate操作数据库

一.什么是Redis

Redis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。

Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

二.RedisTemplate及其相关方法

1. RedisTemplate

Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作

2.RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

其实这里的ops相当于options, 是RedisTemplate对各种不同的Redis数据类型进行操作。其实还有另外的方法:

redistempalate.boundValueOps
redistempalate.boundSetOps
redistempalate.boundListOps
redistempalate.boundHashOps
redistempalate.boundZSetOps

三.RedisTemplate操作Redis数据库的具体例子

1.值类型操作:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestValue {
    @Autowired
    private RedisTemplate redisTemplate;    
    @Test
    public void setValue(){
//存值,针对值类型,ops相当于options
        redisTemplate.boundValueOps("name").set("itcast");      
    }   
    @Test
    public void getValue(){
        String str = (String) redisTemplate.boundValueOps("name").get();
        System.out.println(str);
    }   
    @Test
    public void deleteValue(){
        redisTemplate.delete("name");
    }   
}
2.集合类型操作之Set类型,无序,即存取顺序不一定相同
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestSet {
    
    @Autowired
    private RedisTemplate redisTemplate;
    
    /**
     * 存入值
     */
    @Test
    public void setValue(){
        redisTemplate.boundSetOps("nameset").add("aaa");        
        redisTemplate.boundSetOps("nameset").add("bbb");    
        redisTemplate.boundSetOps("nameset").add("ccc");
    }
    
    /**
     * 提取值
     */
    @Test
    public void getValue(){
        Set members = redisTemplate.boundSetOps("nameset").members();
        System.out.println(members);
    }
    
    /**
     * 删除集合中的某一个值
     */
    @Test
    public void deleteValue(){
        redisTemplate.boundSetOps("nameset").remove("ccc");
    }
    
    /**
     * 删除整个集合
     */
    @Test
    public void deleteAllValue(){
        redisTemplate.delete("nameset");
    }
}

输出结果:[aaa, bbb, ccc]

3.List类型操作

list类型分为两种,一种是左压栈,一种是右压栈

  • 右压栈:
/**
     * 右压栈:后添加的对象排在后边,相当于队列,相当于先进先出
     */
    @Test
    public void testSetValue1(){        
        redisTemplate.boundListOps("namelist1").rightPush("aaa");
        redisTemplate.boundListOps("namelist1").rightPush("bbb");
        redisTemplate.boundListOps("namelist1").rightPush("ccc");       
    }
    
    /**
     * 显示右压栈集合,range 表示查询的索引,从第几个查到第几个,如果想查询所有的数的话只能将第二个数写得大一点。
     */
    @Test
    public void testGetValue1(){
        List list = redisTemplate.boundListOps("namelist1").range(0, 10);
        System.out.println(list);
    }

运行结果:aaa,bbb,ccc

  • 左压栈:
/**
     * 左压栈:后添加的对象排在前边,相当于栈,先进后出
     */
    @Test
    public void testSetValue2(){        
        redisTemplate.boundListOps("namelist2").leftPush("刘备");
        redisTemplate.boundListOps("namelist2").leftPush("关羽");
        redisTemplate.boundListOps("namelist2").leftPush("张飞");     
    }
    
    /**
     * 显示左压栈集合
     */
    @Test
    public void testGetValue2(){
        List list = redisTemplate.boundListOps("namelist2").range(0, 10);
        System.out.println(list);
}

运行结果:ccc,bbb,aaa

  • 根据索引查询元素
/**
     * 查询集合某个元素
     */
    @Test
    public void testSearchByIndex(){
        String s = (String) redisTemplate.boundListOps("namelist1").index(1);
        System.out.println(s);

}

运行结果:返回索引为1的元素

  • 移除某个元素的值
/**
     * 移除集合某个元素,其中remove中第一个参数是移除的个数
     */
    @Test
    public void testRemoveByIndex(){
        redisTemplate.boundListOps("namelist1").remove(1, "bbb");
}

表示移除名字为bbb的元素

4.Hash类型操作

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
public class TestHash {
    @Autowired
    private RedisTemplate redisTemplate;
 
    //    存值
    @Test
    public void testSetValue() {
        redisTemplate.boundHashOps("namehash").put("a", "张三");
        redisTemplate.boundHashOps("namehash").put("b", "李四");
        redisTemplate.boundHashOps("namehash").put("c", "王五");
        redisTemplate.boundHashOps("namehash").put("d", "张六");
    }
 
    //获取所有的key
    @Test
    public void testGetKeys() {
        Set s = redisTemplate.boundHashOps("namehash").keys();
        System.out.println(s);
    }
 
    //    获取所有的value
    @Test
    public void testGetValues() {
        List values = redisTemplate.boundHashOps("namehash").values();
        System.out.println(values);
    }
 
    //    根据key获取值
    @Test
    public void testGetValueByKey() {
        Object object = redisTemplate.boundHashOps("namehash").get("b");
        System.out.println(object);
    }
 
    //根据key移除值
    @Test
    public void testRemoveValueByKey() {
        redisTemplate.boundHashOps("namehash").delete("c");
    }
 
}

你可能感兴趣的:(Redis--使用RedisTemplate操作数据库)