首页 > 数据库 >redis学习笔记4: 在Java中操作Redis

redis学习笔记4: 在Java中操作Redis

时间:2024-05-14 10:31:38浏览次数:26  
标签:Java Redis redis System key println redisTemplate out

redis学习笔记4: 在Java中操作Redis


Redis的Java客户端

  • Jedis [命令和原生Redis基本相同]

  • Lettuce [性能高效]

  • Spring Date Redis [可以在Spring项目中使用, 简化操作]


Spring Date Redis使用方式

导入maven坐标

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>3.2.4</version>
</dependency>

其他版本管理方式

<properties>
    <redis>3.2.4</redis>
</properties>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${redis}</version>
</dependency>

配置Redis数据源

application-dev

spring: #是spirng分级下的
 redis:
  host: localhost
  port: 6379
  password: 123456 #redis 5.0密码需要被""包裹
  database: 0 #一共有16个库 DB0 不同数据库的数据是完全隔离的 [在有些情况可能不被识别]

application

spring:
 redis:
  host: ${spring.redis.host}
  port: ${spring.redis.port}
  password: ${spring.redis.password}}   
  database: ${spring.redis.database}

编写相关配置类, 创建RedisTemplate对象

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean //将第三方类交给IOC容器管理
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板类");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置key的序列化器, 默认为JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置redis连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }

通过RedisTemplate对象操作Redis

string

public void testString(){
    redisTemplate.opsForValue().set("name","小明");

    //get key
    String name = (String) redisTemplate.opsForValue().get("name");
    String city2 = (String) redisTemplate.opsForValue().get("city2");
    System.out.println(name);
    System.out.println(city2);

    //SETEX key seconds value  设置过期时间为seconds的key
    //SETEX code 3 1234
    redisTemplate.opsForValue().set("code","1234",10, TimeUnit.SECONDS); //使用枚举类写时间单位

    //setNX 当key不存在时创建
    //redis的string和java的String不是完全不同, 最后都会转化成redis字符串存储
    redisTemplate.opsForValue().setIfAbsent("lock",1);
    redisTemplate.opsForValue().setIfAbsent("lock",2);
}

hash

//    @Test
public void testHash() {
    //hset hget hkeys hvals
    HashOperations hashOperations = redisTemplate.opsForHash();
    //hset key filed value
    hashOperations.put("100","name","tom");
    hashOperations.put("100","age","20");
    hashOperations.put("100","gender","male");

    //hget key field
    String name = (String) hashOperations.get("100","name");
    System.out.println(name);

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

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

    //hdel key field
    hashOperations.delete("100","gender");
}

set

public void testSet1(){
    SetOperations setOperations = redisTemplate.opsForSet();

    //sadd 插入新数据
    setOperations.add("set1","aa","bb","cc");

    //smembers 遍历
    setOperations.members("set1");

    //scard 元素数量
    Long size = setOperations.size("set1");
    System.out.println(size);

    //sinter 交集
    System.out.println(setOperations.intersect("set1", "set2"));

    //sunion 并集
    System.out.println(setOperations.union("set1", "set2"));

    //srem 删除
    setOperations.remove("set1","aa","bb");
}

list

public void testList(){
    ListOperations listOperations = redisTemplate.opsForList();

    //Lpush 左压栈
    listOperations.leftPush("mylist","aa");
    listOperations.leftPush("mylist","bb");
    listOperations.leftPush("mylist","cc");
    listOperations.leftPush("mylist","dd");

    //Llen 元素数量
    System.out.println(listOperations.size("mylist"));

    //Lrange 遍历
    System.out.println(listOperations.range("mylist", 0, -1));

    //Rpop 右弹出
    listOperations.rightPop("mylist");

    //Llen 元素数量
    System.out.println(listOperations.size("mylist"));
}

zset

public void testZSet(){
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    //zadd key value score 向zset插入数据
    zSetOperations.add("zset1","a",19);

    //zrange 遍历zset
    System.out.println(zSetOperations.range("zset1", 0, -1));

    //zrange key start end withScores  遍历zset并显示分数
    System.out.println(zSetOperations.rangeByScoreWithScores("myset1", 0, -1));

    //zincreby 为指定key的分数添加一个增量
    zSetOperations.incrementScore("zset1","c",10);

    //zrem 删除指定key
    zSetOperations.remove("zset1","a","b");
}

通用命令操作

public void testCommon(){
    //keys * 查询所有key
    Set keys = redisTemplate.keys("*");
    System.out.println(keys);

    //exists 查询指定key是否存在
    Boolean name = redisTemplate.hasKey("name");

    //type 查询keys集合中所有数据的类型
    for (Object key : keys) {
        System.out.println(redisTemplate.type(key));
    }

    //del 根据key删除数据
    redisTemplate.delete("mylist");
}

其他的

在图形化界面key正常, valule显示乱码, 通过java输出是正常的

不设置序列化器, 会使用默认的序列化器, key乱码, 可以在java中查询到

标签:Java,Redis,redis,System,key,println,redisTemplate,out
From: https://www.cnblogs.com/HIK4RU44/p/18190716

相关文章

  • Java开发微服务SpringCloudAlibaba+Nginx+Vue+Mysql+RabbitMQ
    项目介绍随着互联网技术的飞速发展和移动设备的普及,自媒体平台已经成为人们获取信息、传播观点、实现自我价值的重要途径。自媒体平台的设计与实现,不仅需要考虑如何提供便捷的内容发布、编辑和管理功能,还需要考虑如何构建健康的内容生态,保证信息的真实性和可靠性,防止虚假信息的传......
  • day4-1-Redis
    day4-1-Redis入门Redis介绍Redis是一个基于内存的key-value结构数据库基于内存存储,读写性能高适合存储热点数据(热点商品,咨询,新闻)(在特定时间有大量访问量)keyvalueid101name小智city北京redis中文网Redis安装Redis启动-服务端......
  • php + redis 实现秒杀
    一、概述秒杀这个问题在很多面试的时候都会提到,会有各个方面的调优,配置等等,本文在这里举个简单的例子来演示下秒杀的过程,供大家参考发散思维。 二、准备介绍thinkPHP6框架redis6.0php7.4redis操作包predisapache-jmeter-5.6 三、代码实现秒杀controller层的简易代......
  • ZonedDateTime 转为 java.util.Date
    publicstaticvoidmain(String[]args){//1、使用ZoneId定义美国时区ZoneIdzoneId=ZoneId.of("America/New_York");//2、获取当前时间ZonedDateTimenow=ZonedDateTime.now();//3、将当前时间转换为美国时间Z......
  • java内部类
    1内部类1.1概述●内部类就是定义在一个类里面的类。内部内(寄生),外部内(宿主)1.2使用场景●内部的完整结构只为外部事务提供服务,那么内部的完整结构可以使用内部类来设计●内部类通常可以方便访问外部类的成员,包括私有成员●内部类提供了更好的封装性,可用private,protect......
  • Java8新特性
    1Lambda表达式1.1使用Lambda表达式实现函数式接口1【案例1】函数是接口MyInterOne//函数式接口(接口中只有一个抽象方法)@FunctionalInterfacepublicinterfaceMyInterOne{publicabstractvoidmethodOne();}【案例2】定义MyInterOneImpl类实现接口MyInterOnepub......
  • java的图像处理 java图像处理为什么耗cpu
    CPU:有的应用需要大量计算,他们会长时间、不间断地占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题。例如:代码递归导致的无限循环,正则表达式引起的回溯,JVM频繁的FULLGC,以及多线程编程造成的大量上下文切换等,这些都有可能导致CPU资源繁忙。内存:Java程......
  • 运维必备Linux学习day2(mysql,jdk,redis,docker安装)
    一.MySQL安装①Linux环境:1.虚拟机Centos7.6版本安装,2.准备类似版本 mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar包1.新建文件夹/opt/mysql,并cd进去,首先:mkdir/opt/mysql2.运行 wgethttp://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包......
  • java常用异步说明
    简介异步编程是一种编程范式,允许在等待某些操作(如IO操作)完成的过程中,暂停当前线程的执行,让出控制权,从而允许其他操作或线程并发执行。在Java中,有多种实现异步编程的方式,包括使用Future和Callable接口、CompletableFuture类以及ExecutorService等。下面是一个简单的Java异步编程......
  • 字节面试:说说Java中的锁机制?
    Java中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。锁的作用主要体现在以下几个方面:互斥访问:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据......