欢迎访问上玄的博客

【笔记】Redis介绍和Java的整合

技术教程 · 03-28
【笔记】Redis介绍和Java的整合

redis模板的调用实例代码

package com.sky.test;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * Redis测试类
 * @author 上玄
 * @since 2025-03-21
 */
@SpringBootTest
public class SpringDataRedisTest {

    @Resource
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        // 获取RedisTemplate的子类对象
        ValueOperations ops = redisTemplate.opsForValue();
        HashOperations hashOps = redisTemplate.opsForHash();
        ListOperations listOps = redisTemplate.opsForList();
        SetOperations setOps = redisTemplate.opsForSet();
        ZSetOperations zSetOps = redisTemplate.opsForZSet();
    }

    /**
     * 操作字符串
     */
    @Test
    public void testString(){
        // set get
        redisTemplate.opsForValue().set("name","张三");
        String name = (String) redisTemplate.opsForValue().get("name");
        System.out.println(name);
        // setex: 设置键值对并指定过期时间
        redisTemplate.opsForValue().set("city","北京",3, TimeUnit.MINUTES);
        // setnx: 设置键值对,如果键不存在则成功,否则失败
        // 相当于:if not exists name then set name value
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("name", "李四");
        System.out.println(aBoolean);
    }


    /**
     * 操作哈希类型
     */
    @Test
    public void testHash(){
        // hset hget : 设置和获取哈希表中的字段值
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("user1", "name", "张三");
        hashOperations.put("user1", "age", "25");
        String name = (String) hashOperations.get("user1", "name");
        System.out.println(name);
        // hasKey: 检查哈希表中是否存在指定的字段
        Boolean b = hashOperations.hasKey("user1", "age");
        System.out.println(b);
        // hkeys命令:获取哈希表中所有的字段名
        Set user1 = hashOperations.keys("user1");
        System.out.println(user1);
        // hvals命令:获取哈希表中所有的字段值
        List user11 = hashOperations.values("user1");
        System.out.println(user11);
        // hdel : 删除哈希表中的一个或多个字段
        Long delete = hashOperations.delete("user1", "age");
        System.out.println(delete);
        Boolean b1 = hashOperations.hasKey("user1", "age");
        System.out.println(b1);
    }

    /**
     * 操作列表类型
     */
    @Test
    public void testList(){
        // lpush rpush : 在列表的左侧或右侧插入一个或多个值
        ListOperations listOperations = redisTemplate.opsForList();
        // lpushAll : 在列表的左侧插入多个值
        listOperations.leftPushAll("mylist", "a", "b", "c");
        // lpush : 在列表的左侧插入一个值
        listOperations.leftPush("mylist", "d");
        // lrange : 获取列表中指定范围内的元素
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println("mylist: " + mylist);
        // llen : 获取列表的长度
        Long length = listOperations.size("mylist");
        System.out.println("长度:" + length);
        // rpop : 移除并返回列表的最后一个元素
        String rightPop = (String) listOperations.rightPop("mylist");
        System.out.println("rightPop: " + rightPop);
        // lrem : 从列表中删除指定数量和值相同的元素
        Long remove = listOperations.remove("mylist", 1, "b");
        System.out.println("remove: " + remove);
        // ltrim : 截取列表
        listOperations.trim("mylist", 0, 1);
        mylist = listOperations.range("mylist", 0, -1);
        System.out.println("截取后:" + mylist);
    }

    /**
     * 操作集合类型
     */
    @Test
    public void testSet() {
        SetOperations setOperations = redisTemplate.opsForSet();

        // sadd : 添加元素到集合中
        setOperations.add("myset1", "a", "b", "c", "d");
        setOperations.add("myset2", "a", "b", "x", "y", "z");
        // smembers : 获取集合中的所有元素
        Set myset1 = setOperations.members("myset1");
        System.out.println("myset1: " + myset1);
        Set myset2 = setOperations.members("myset2");
        System.out.println("myset2: " + myset2);
        // sismember : 判断元素是否在集合中
        Boolean isMember = setOperations.isMember("myset1", "a");
        System.out.println("isMember: " + isMember);
        // sdiff : 获取两个集合的差集
        Set diff = setOperations.difference("myset1", "myset2");
        System.out.println("差集:" + diff);
        // sinter : 获取两个集合的交集
        Set intersect = setOperations.intersect("myset1", "myset2");
        System.out.println("交集:" + intersect);
        // sunion : 获取两个集合的并集
        Set union = setOperations.union("myset1", "myset2");
        System.out.println("并集:" + union);
        // smove : 将元素从一个集合移动到另一个集合
        Boolean move = setOperations.move("myset1", "myset2", "a");
        System.out.println("move: " + move);
        // scard : 获取集合的元素数量
        Long size = setOperations.size("myset1");
        System.out.println("size: " + size);
        // srem : 从集合中删除元素
        Long remove = setOperations.remove("myset1", "a", "b");
        System.out.println("remove: " + remove);
    }

    /**
     * 操作有序集合类型
     */
    @Test
    public void testZSet() {
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        // zadd : 添加元素到有序集合中
        zSetOperations.add("myzset", "a", 1);
        zSetOperations.add("myzset", "b", 2);
        zSetOperations.add("myzset", "c", 3);
        // zrange : 获取有序集合中指定范围内的元素
        Set range = zSetOperations.range("myzset", 0, -1);
        System.out.println("range: " + range);
        // zrangeWithScores : 获取有序集合中指定范围内的元素及其分数
        Set rangeWithScores = zSetOperations.rangeWithScores("myzset", 0, -1);
        System.out.println("rangeWithScores: " + rangeWithScores);
        // zrank : 获取元素在有序集合中的排名
        Long rank = zSetOperations.rank("myzset", "b");
        System.out.println("rank: " + rank);
        // zrevrank : 获取元素在有序集合中的倒序排名
        Long reverseRank = zSetOperations.reverseRank("myzset", "b");
        System.out.println("reverseRank: " + reverseRank);
        // zscore : 获取元素的分数
        Double score = zSetOperations.score("myzset", "b");
        System.out.println("score: " + score);
        // zcount : 获取有序集合中指定分数范围内的元素数量
        Long count = zSetOperations.count("myzset", 1, 2);
        System.out.println("count: " + count);
        // zrem : 从有序集合中删除元素
        Long remove = zSetOperations.remove("myzset", "a", "b");
        System.out.println("remove: " + remove);
        // zcard : 获取有序集合的元素数量
        Long size = zSetOperations.size("myzset");
        System.out.println("size: " + size);
        // zincrby : 增加元素的分数
        Double increment = zSetOperations.incrementScore("myzset", "b", 1);
        System.out.println("increment: " + increment);
    }

    /**
     * 操作通用类型命令
     */
    @Test
    public void testCommon() {
        // keys : 获取所有键
        Set keys = redisTemplate.keys("*");
        System.out.println("keys: " + keys);

        // exists : 检查键是否存在
        Boolean exists = redisTemplate.hasKey("name");
        System.out.println("exists: " + exists);

        // type : 获取键的类型
        DataType type = redisTemplate.type("name");
        System.out.println("type: " + type);
        for (Object key : keys) {
            DataType type1 = redisTemplate.type(key);
            System.out.println("key: " + key + " type: " + type1);
        }

        // expire : 设置键的过期时间
        redisTemplate.expire("name", 3, TimeUnit.MINUTES);

        // persist : 移除键的过期时间
        redisTemplate.persist("name");

        // move : 移动键到另一个数据库
        redisTemplate.move("name", 1);

        // randomKey : 随机获取一个键
        String randomKey = (String) redisTemplate.randomKey();
        System.out.println("randomKey: " + randomKey);

        // rename : 重命名键
        redisTemplate.rename("name", "newName");

        // renamenx : 重命名键,如果新键不存在则成功
        Boolean rename = redisTemplate.renameIfAbsent("newName", "name");
        System.out.println("rename: " + rename);

        // delete : 删除一个或多个键
        redisTemplate.delete("newName");
        redisTemplate.delete("age");
    }
}

此内容需要评论后才能查看哦 (*^▽^*) 点击登录
评论进度:0/1

Java Redis 笔记 Springboot
表情
爱心
手势
动物
美食
天气

网站已运行 35 天 | 共有文章 2 篇 | 累计访问 4482 人次