【redis系列】springboot整合redis

大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,回复“电子书”,就可以获得200多本编程相关电子书哈~
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!

简单测试步骤

1、导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

我安装的是2.6.3的版本,该版本下默认的使用lettuce,而不是jedis,若想使用jedis,需要自己额外进行引用
image.png

2、配置文件

spring:
  redis:
    host: 127.0.0.1 # ip
    port: 6379 # redis端口
    password: # redis密码

3、测试

package com.walker.utils;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class RedisUtilsTest {

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    /**
     * 测试String
     */
    @Test
    public void testString(){

        ValueOperations<String, String> stringOps = redisTemplate.opsForValue();
        //普通get,set
        stringOps.set("name","hello");
        System.out.println(stringOps.get("name"));
        //设置过期时间,
        stringOps.set("string:time","1",10, TimeUnit.SECONDS);
        System.out.println("获取过期时间:"+redisTemplate.getExpire("string:time",TimeUnit.SECONDS));

        //在key的value进行拼接
        stringOps.append("name","11111111111111");
        stringOps.set("num","10");
        //decrement:-1
        stringOps.decrement("num");
        System.out.println(stringOps.get("num"));
        //increment:+1
        stringOps.increment("num");
        System.out.println(stringOps.get("num"));

        stringOps.set("getAndDelete","11");
        /**
         * getAndDelete 无法使用
         * 报错:ERR unknown command `GETDEL`
         */

        System.out.println("获取过期时间:"+redisTemplate.getExpire("string:time",TimeUnit.SECONDS));

        /**
         * getAndPersist 无法使用
         * 报错: ERR unknown command `GETEX`, with args beginning with: `name`, `PERSIST`,
         */

        System.out.println("获取过期时间:"+redisTemplate.getExpire("string:time",TimeUnit.SECONDS));

        System.out.println("该key的长度为:"+stringOps.size("name"));

    }


    /**
     * 测试hash
     */
    @Test
    void testHash(){
        HashOperations<String, Object, Object> hashOps = redisTemplate.opsForHash();
        String key1="test:hash";
        hashOps.put(key1,"name","walker");
        hashOps.put(key1,"age","18");
        hashOps.put(key1,"school","广药");
        System.out.println(hashOps.get(key1, "name"));
        System.out.println(hashOps.get(key1, "age"));
        System.out.println(hashOps.get(key1, "school"));

        hashOps.increment(key1,"age",5);
        System.out.println("+5之后的结果"+hashOps.get(key1, "age"));
        hashOps.increment(key1,"age",-10);
        System.out.println("-10之后的结果:"+hashOps.get(key1, "age"));

        //删除key
        hashOps.delete(key1,"school");
        System.out.println(hashOps.get(key1, "school"));

        //打印实体结果
        Map<Object, Object> entries = hashOps.entries(key1);
        System.out.println(entries);

        System.out.println("是否存在该key:"+hashOps.hasKey(key1, "age"));

        System.out.println("value的长度:"+hashOps.lengthOfValue(key1, "age"));
        Set<Object> keys = hashOps.keys(key1);
        System.out.println("hash中的key集合"+keys);


        //values 是所有值的结果
        List<Object> values = hashOps.values(key1);
        for (Object value : values) {
            System.out.println(value);
        }

        System.out.println("获取长度"+hashOps.size(key1));


    }


    /**
     * 测试set
     */
    @Test
    void testSet(){
        SetOperations<String, String> setOps = redisTemplate.opsForSet();
        String key="hash:set";
        String key2="hash:set2";
        String key3="hash:set3";
        setOps.add(key,"1","2","3","4","5");
        setOps.add(key2,"7","8","9","4","5");
        System.out.println("key的所有成员"+setOps.members(key));
        System.out.println("key2的所有成员"+setOps.members(key2));

        System.out.println("key和key2的差集:"+setOps.difference(key, key2));
        System.out.println("key2和key的差集:"+setOps.difference(key2, key));

        setOps.differenceAndStore(key,key2,key3);
        System.out.println("key3的所有成员"+setOps.members(key3));

        System.out.println("随机打印成员"+setOps.distinctRandomMembers(key, 1));

        System.out.println("key和key2的交集"+setOps.intersect(key, key2));

        System.out.println("2是否是KEY集合的结果:"+setOps.isMember(key, "2"));

        setOps.move(key,"5",key3);
        System.out.println("key的所有成员"+setOps.members(key));
        System.out.println("key3的所有成员"+setOps.members(key3));

        System.out.println("key和key2的并集"+setOps.union(key, key2));
        System.out.println("长度:"+setOps.size(key));
        System.out.println("弹出key2的值:"+setOps.pop(key2));
        System.out.println("移除key2中的8,结果为:"+setOps.remove(key2,"8"));

    }



    /**
     * 测试list
     */
    @Test
    void testList(){
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        String key="list";
        String key2="list2";
        listOps.leftPush(key,"0");
        listOps.leftPush(key,"1");
        listOps.leftPush(key,"2");
        listOps.leftPush(key,"3");
        listOps.leftPush(key,"2");
        System.out.println(listOps.range(key, 0, 10));

        /**
         * 尽量使用push作为数据插入的方式
         * 而不使用set,因为使用的话如果key不存在,会报错误:ERR no such key
         * 如果索引超出了现有的索引,会报:ERR index out of range
         *         listOps.set(key,1,"1");
         *         listOps.set(key,2,"2");
         *         listOps.set(key,3,"3");
         *         listOps.set(key,4,"2");
         */


        System.out.println("长度"+listOps.size(key));

        /**
         * System.out.println("第一个数据2存在key中的索引"+listOps.indexOf(key, "2"));
         *  ERR unknown command `LPOS`, with args beginning with: `test:list`, `2`,
         *
         */

        listOps.leftPush(key,"10");//从左边加入
        listOps.rightPush(key,"111");//右边加入
        System.out.println(listOps.range(key, 0, 10));


        listOps.leftPop(key); //左边移除第一个
        listOps.rightPop(key); //右边移除第一个
        System.out.println(listOps.range(key, 0, 10));

        listOps.remove(key,1,"3"); //移除1个3
        System.out.println(listOps.range(key, 0, 10));

        listOps.trim(key,2,4); //裁剪
        System.out.println(listOps.range(key, 0, 10));

        /**
         * 移动:
         *  listOps.move(key, RedisListCommands.Direction.LEFT,key2, RedisListCommands.Direction.LEFT);
         * ERR unknown command `LMOVE`, with args beginning with: `list`, `list2`, `LEFT`, `LEFT`,
         */

    }


    /**
     * 测试zset
     */
    @Test
    public void testZset(){
        ZSetOperations<String, String> zsetOps = redisTemplate.opsForZSet();
        String key="test:zset";
        String key2="test:zset2";
        zsetOps.add(key,"小明",5);
        zsetOps.add(key,"李四",10);
        zsetOps.add(key,"老王",4);

        zsetOps.add(key2,"老王",10);
        zsetOps.add(key2,"钟老三",77);

        System.out.println(zsetOps.range(key, 0, 10));
        System.out.println(zsetOps.reverseRange(key, 0, 10));
        System.out.println("按照分数排序[从小到大]"+zsetOps.rangeByScore(key, 0, 10));
        System.out.println("按照分数排序[从大到小]"+zsetOps.reverseRangeByScore(key, 0, 10));

        System.out.println("统计分数范围内的数目:"+zsetOps.count(key, 0, 10));

        System.out.println(zsetOps.zCard(key));

        //差集
        System.out.println("key和key2的差集"+zsetOps.difference(key, key2));
        System.out.println("分数差集"+zsetOps.differenceWithScores(key, key2));

        //并集
        System.out.println(zsetOps.union(key, key2));
        System.out.println(zsetOps.unionWithScores(key, key2));

        //交集
        System.out.println(zsetOps.intersect(key, key2));
        System.out.println(zsetOps.intersectWithScores(key, key2));

        //随机数
        System.out.println(zsetOps.randomMember(key));
        System.out.println(zsetOps.randomMembers(key, 2));
        System.out.println(zsetOps.randomMemberWithScore(key));
        System.out.println(zsetOps.randomMembersWithScore(key, 2));

        //长度
        System.out.println(zsetOps.size(key));

        //增加分数
        zsetOps.incrementScore(key,"老王",11);
        System.out.println("老王分数:"+zsetOps.score(key, "老王"));

        //t
        System.out.println(zsetOps.popMax(key));
        System.out.println(zsetOps.popMin(key));


    }





}

问题

1、nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
image.png
改成这个就可以使用了
image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalkerShen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值