redis+java操作

redis是现在很流行,区别于那些关系数据库(mysql)的一个非关系数据库,也称缓存数据库。

记得当时找工作的时候,就是由于当时在简历上写了,了解redis,这也为我后面的面试挖下了很大的坑,正因为当时对redis数据库简单的了解,只知道它是一个key-value型,可做数据库缓存。当时面试官就拼命的问我这一方面的知识,一脸懵逼的我,只等乱说,乱吹,这也是我失去很多不错公司的面试机会。

最近为了提高自己,对redis近一步的详细学习,也为我之前的没努力做出弥补,分享一下自己对redis的认识,希望大老们,发现那里不对,给我指点出来,我及时更正。

问题1.redis基本的数据类型?(这也是当时面试官问我的问题,记得当时我就只了解string。学习redis后才发现,它尽然提供了不少数据类型)

  • String: 字符串
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

//RedisTemplate位于spring-data-redis包下 操控数据操作的对象

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

string

    /**
     * 测试存储String
     */
    @Test   
    public  void testString(){
        //RedisTemplate位于spring-data-redis包下 操控数据操作的对象
        //通过set方法,(key,value) 添加一个key=郑,value=zhengke数据
        redisTemplate.opsForValue().set("郑", "zhengke");
        //通过get方法,找到key对应的value值
        System.out.println(redisTemplate.opsForValue().get("郑").toString());
    }    //输出hello

hash

    /**
     * hash
     * hash set 的时候需要传入三个参数,
     * 第一个为 key,
     * 第二个为 field,
     * 第三个为存储的值。
     * 一般情况下 Key 代表一组数据,field 为 key 相关的属性,而 value 就是属性对应的值.
     */
    @Test    public void testHash() {
        //redisTemplate.opsForHash()获得一个hash
        HashOperations hash = redisTemplate.opsForHash();
        //put添加 (key,(field,value))数据类型
        hash.put("hash","hello","java");
        //get key+field=》》value
        String value=(String) hash.get("hash","hello");
        System.out.println("hash value :"+value);
    }    //输出 hash value :java

list

    /**
     *Redis
     * list 的应用场景非常多,也是 Redis 最重要的数据结构之一。
     * 使用 List 可以轻松的实现一个队列,List 典型的应用场景就是消息队列,
     * 可以利用 list 的 PUSH 操作,将任务存在 list 中,然后工作线程再用 POP 操作将任务取出进行执行。
     */
    @Test
    public void testListPop() {
        String key="list";
        //删除所有key=“list”的数据
        redisTemplate.delete(key);
        //通过redisTemplate.opsForList()获得一个list
        ListOperations list = redisTemplate.opsForList();
        //插入数据push
        list.leftPush(key,"just");
        list.leftPush(key,"do");
        list.leftPush(key,"it");
        //取数据pop
        String value=list.leftPop(key);
        System.out.println("list value :"+value);
    }    //输出结果 list value :it

用图分析一下list

redis+java操作_第1张图片

    /**
     *使用 range 来读取,
     * range 后面的两个参数就是插入数据的位置,
     * 输入不同的参数就可以取出队列中对应的数据。
     *
     */
    @Test
    public void testListRange() {
        String key="list";
        redisTemplate.delete(key);
        ListOperations list = redisTemplate.opsForList();
        list.rightPush(key,"just");
        list.rightPush(key,"do");
        list.rightPush(key,"it");

        List values=list.range(key,0,3);
        for (String v:values){
            System.out.println("list range :"+v);
        }
    }    //输出结果
    //list range :just
    //list range :do
    //list range :it

set

    /**
     * Redis
     * set 对外提供的功能与 list 类似是一个列表的功能,
     * 特殊之处在于 set 是可以自动排重的,当需要存储一个列表数据,
     * 又不希望出现重复数据时,set 是一个很好的选择,
     * 并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,
     * 这个也是 list 所不能提供的。
     */
    @Test
    public void testSet(){
        String key = "set";
        redisTemplate.delete(key);
        SetOperations set = redisTemplate.opsForSet();
        set.add(key,"just");
        set.add(key,"do");
        set.add(key,"do");
        set.add(key,"it");
        Set values = set.members(key);
        for (String value:values){
            System.out.println("set value :"+value);
        }
    }    //输出结果
    //set value :just
    //set value :it
    //set value :do

sorted set

    /**
     * Redis
     * sorted set 的使用场景与 set 类似,
     * 区别是 set 不是自动有序的,
     * 而 sorted set 可以通过用户额外提供一个优先级(score)的参数来为成员排序,
     * 并且是插入有序,即自动排序。
     */
    @Test
    public void testZset(){
        String key="zset";
        redisTemplate.delete(key);
        ZSetOperations zset = redisTemplate.opsForZSet();
        zset.add(key,"just",1);
        zset.add(key,"now",5);
        zset.add(key,"it",4);
        zset.add(key,"do",3);
        Set zsets=zset.range(key,0,3);
        for (String v:zsets){
            System.out.println("zset value :"+v);
        }        
        //zset value :just
        //zset value :do
        //zset value :it
        //zset value :now


        Set zsetB=zset.rangeByScore(key,0,3);
        for (String v:zsetB){
            System.out.println("zsetB value :"+v);
        }
        //zsetB value :just
        //zsetB value :do
    }
    /**
     * 测试超时失效
     * @throws InterruptedException
     */
    @Test
    public void testExpire() throws InterruptedException {
        ValueOperations operations=redisTemplate.opsForValue();
        operations.set("expire", "java",100, TimeUnit.MILLISECONDS);
        Thread.sleep(1000);
        boolean exists=redisTemplate.hasKey("expire");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
    }    // 输出 exists is false



    /**
     * 删除数据
     */
    @Test    public void testDelete() {
        ValueOperations operations=redisTemplate.opsForValue();
        operations.set("deletekey", "springboot");
        redisTemplate.delete("deletekey");        //判断key是否还在
        boolean exists=redisTemplate.hasKey("deletekey");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
    }    //输出 exists is false

redis+java中还有很多操作,楼主就不一一举例了,可有通api学习,常用的方法记在,不常用遇到的时候查询学习。

https://yq.aliyun.com/ziliao/305516

你可能感兴趣的:(redis+java操作)