当前位置: 首页 > news >正文

Redis-17.在Java中操作Redis-Spring Data Redis使用方式-通用操作

一.通用操作

package com.sky.test;

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.connection.DataType;
import org.springframework.data.redis.core.*;

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

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {
        System.out.println(redisTemplate);  // 首先输出redisTemplate对象看是否为空
        ValueOperations valueOperations = redisTemplate.opsForValue();  // redis当中的字符串类型数据操作对象
        HashOperations hashOperations = redisTemplate.opsForHash();     // redis当中的哈希类型数据操作对象
        ListOperations listOperations = redisTemplate.opsForList();     // redis当中的列表类型数据操作对象
        SetOperations setOperations = redisTemplate.opsForSet();        // redis当中的集合类型数据操作对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();     // redis当中的有序集合类型数据操作对象
    }

    /*
        操作字符串类型的数据
     */
    @Test
    public void testString() {
        // set get setex setnx
        redisTemplate.opsForValue().set("city","北京");   // set
        String city = (String) redisTemplate.opsForValue().get("city");// get
        System.out.println(city);
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);     // setex
        redisTemplate.opsForValue().setIfAbsent("lock","1");   // setnx
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }

    /*
        操作哈希类型的数据
     */
    @Test
    public void testHash() {
        // hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100","name","Rose");    // put(Object key,Object hashKey,Object value)
        hashOperations.put("100","age","22");   // 对应hset
        String name = (String) hashOperations.get("100", "name");   // 对应hget
        System.out.println(name);

        Set keys = hashOperations.keys("100");      // 对应hkeys
        System.out.println(keys);

        List values = hashOperations.values("100");     // 对应hvals
        System.out.println(values);

        hashOperations.delete("100","name");  // 对应hdel
    }

    /*
        操作列表类型的数据
     */
    @Test
    public void testList() {
        // LPUSH, lrange, rpop,llen
        ListOperations listOperations = redisTemplate.opsForList();
        // leftPushAll(Object key, Object ...values):一次往列表中插入多个元素
        listOperations.leftPushAll("mylist","a","b","c");

        // leftPush(Object key, Object value):往列表中插入单个元素
        listOperations.leftPush("mylist","d");

        // range(Object key,Long start, Long end):获取列表指定范围内的元素,并构成一个列表
        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        // rightPop(Object key):移除并获取列表的最后一个元素
        String rightPop = (String) listOperations.rightPop("mylist");
        System.out.println(rightPop);

        // size(Object key):获取列表长度
        Long length = listOperations.size("mylist");
        System.out.println(length);
    }

    /*
        操作集合类型的数据
     */
    @Test
    public void testSet() {
        // sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();
        // add(Object key Object... value)
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");

        // members(Object key)
        Set set1 = setOperations.members("set1");
        System.out.println(set1);

        // size(Object key)
        Long size = setOperations.size("set1");
        System.out.println(size);

        // intersect(Object key,Object otherKey)
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        // union(Object key,Object otherKey)
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        // remove(Object key,Object... value)
        setOperations.remove("set1","a","b");

    }

    /*
        操作有序集合的数据
     */
    @Test
    public void testZSet(){
        // zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        // add(Object key, Object value, double score)
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",11);
        zSetOperations.add("zset1","c",13);

        // range(Object key,long start,long end)
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        // incrementScore(Object key, Object value, double incrementScore)
        zSetOperations.incrementScore("zset1","a",4);

        // remove(Object key, Object... value)
        zSetOperations.remove("zset1","a","b");
    }

    /*
        通用操作
     */
    @Test
    public void testCommon() {
        // KEYS, EXISTS, TYPE, DEL
        // keys(Object pattern)     查找所有符合给定模式(pattern)的key
        Set keys = redisTemplate.keys("*");

        // hasKey(Object key)
        Boolean flag = redisTemplate.hasKey("set1");
        System.out.println(flag);

        // type(Object key)
        for (Object key : keys) {
            DataType dataType = redisTemplate.type(key);
            System.out.println(dataType);
        }

        // delete(Object key)
        Boolean delete = redisTemplate.delete("set1");
        System.out.println(delete);
    }
}

1. keys(Object pattern)     查找所有符合给定模式(pattern)的key。对应keys

查找成功

2.hasKey(Object key) 判断是否存在该键,对应exists

3.type(Object key) 获取该键所对应的值的类型,对应type

4.delete(Object key) 删除该键及值,对应del

删除成功 

相关文章:

  • 类的其它特性
  • 网络通信三大核心表项详解:MAC表、ARP表、路由表
  • 【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现
  • CentOS 上 Apache Kafka 2.13-3.8.1 集群部署指南(ZooKeeper 模式)
  • 如何改电脑网络ip地址:一步步指导
  • 深度学习 Deep Learning 第14章 自编码器
  • 将视频m4s文件转换为mp4格式
  • 慧通测控:汽车RGB氛围灯功能测试介绍
  • 【VM虚拟机ip问题】
  • Javascript代码压缩混淆工具terser详解
  • 在ArcGIS中导入气候tif文件出现 “输入与输出之间的基准面冲突” 警告
  • C++\MFC锁lock从专家到小白
  • 基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】
  • Etcd用的是Raft算法
  • Linux上位机开发实践(超越MPP去开发产品)
  • 青少年编程与数学 02-014 高中数学知识点 07课题、专业相关性分析
  • Blender模型导入虚幻引擎设置
  • 静态住宅IP的应用、设置及好处
  • 开发相关的一些网址收藏(持续更新中)
  • [原创](Modern C++)现代C++的关键性概念: 如何正确地返回函数指针?
  • 江西省文化和旅游厅厅长梅亦已任省委宣传部副部长
  • 山大齐鲁医院护士论文现“男性确诊子宫肌瘤”,院方称将核实
  • 今年五一档电影票房已破7亿
  • 抚州一原副县长拉拢公职人员组建“吃喝圈”,长期接受打牌掼蛋等“保姆式”服务
  • 五一上海楼市热闹开局:售楼处全员到岗,热门楼盘连续触发积分
  • 四人自驾游宣恩因酒店爆满无处住宿,求助文旅局后住进局长家