首页 > 数据库 >Java中使用Redis

Java中使用Redis

时间:2023-06-01 17:34:40浏览次数:48  
标签:Java myZset Redis System 使用 println redisTemplate out

应用框架
Spring Data Redis

Spring Data Redis介绍
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。
Maven坐标

点击查看代码
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
	<version>2.4.8</version>
</dependency>
SpringBoot的starter依赖
点击查看代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下: - ValueOperations:简单K-V操作 - SetOperations:set类型数据操作 - ZSetOperations:zset类型数据操作 - HashOperations:针对hash类型的数据操作 - ListOperations:针对list类型的数据操作

使用步骤

  1. 导入坐标依赖
  2. 编写yml文件配置
点击查看代码
spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接
3. 提供配置类
点击查看代码
/**
 * Redis配置类
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }
}

操作代码

  1. 操作字符串类型数据
点击查看代码
@Test
public void testString(){
    //存值
    redisTemplate.opsForValue().set("city123","beijing");

    //取值
    String value = (String) redisTemplate.opsForValue().get("city123");
    System.out.println(value);

    //存值,同时设置过期时间
    redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

    //存值,如果存在则不执行任何操作
    Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
    System.out.println(aBoolean);
}
2. 操作哈希类型数据
点击查看代码
@Test
public void testHash(){
    HashOperations hashOperations = redisTemplate.opsForHash();

    //存值
    hashOperations.put("002","name","xiaoming");
    hashOperations.put("002","age","20");
    hashOperations.put("002","address","bj");

    //取值
    String age = (String) hashOperations.get("002", "age");
    System.out.println(age);

    //获得hash结构中的所有字段
    Set keys = hashOperations.keys("002");
    for (Object key : keys) {
        System.out.println(key);
    }

    //获得hash结构中的所有值
    List values = hashOperations.values("002");
    for (Object value : values) {
        System.out.println(value);
    }
}
3. 操作列表类型数据
点击查看代码
@Test
public void testList(){
    ListOperations listOperations = redisTemplate.opsForList();

    //存值
    listOperations.leftPush("mylist","a");
    listOperations.leftPushAll("mylist","b","c","d");

    //取值
    List<String> mylist = listOperations.range("mylist", 0, -1);
    for (String value : mylist) {
        System.out.println(value);
    }

    //获得列表长度 llen
    Long size = listOperations.size("mylist");
    int lSize = size.intValue();
    for (int i = 0; i < lSize; i++) {
        //出队列
        String element = (String) listOperations.rightPop("mylist");
        System.out.println(element);
    }
}
4. 操作集合类型数据
点击查看代码
@Test
public void testSet(){
    SetOperations setOperations = redisTemplate.opsForSet();

    //存值
    setOperations.add("myset","a","b","c","a");

    //取值
    Set<String> myset = setOperations.members("myset");
    for (String o : myset) {
        System.out.println(o);
    }

    //删除成员
    setOperations.remove("myset","a","b");

    //取值
    myset = setOperations.members("myset");
    for (String o : myset) {
        System.out.println(o);
    }

}
5. 操作有序集合类型数据
点击查看代码
@Test
public void testZset(){
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    //存值
    zSetOperations.add("myZset","a",10.0);
    zSetOperations.add("myZset","b",11.0);
    zSetOperations.add("myZset","c",12.0);
    zSetOperations.add("myZset","a",13.0);

    //取值
    Set<String> myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }

    //修改分数
    zSetOperations.incrementScore("myZset","b",20.0);

    //取值
    myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }

    //删除成员
    zSetOperations.remove("myZset","a","b");

    //取值
    myZset = zSetOperations.range("myZset", 0, -1);
    for (String s : myZset) {
        System.out.println(s);
    }
}
6. 通用操作
点击查看代码
@Test
public void testCommon(){
    //获取Redis中所有的key
    Set<String> keys = redisTemplate.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }

    //判断某个key是否存在
    Boolean itcast = redisTemplate.hasKey("itcast");
    System.out.println(itcast);

    //删除指定key
    redisTemplate.delete("myZset");

    //获取指定key对应的value的数据类型
    DataType dataType = redisTemplate.type("myset");
    System.out.println(dataType.name());

}

标签:Java,myZset,Redis,System,使用,println,redisTemplate,out
From: https://www.cnblogs.com/wzh-Official/p/17449679.html

相关文章

  • JAVA 反射应用:Annotation
    SomeClass.javaimportjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;importjava.lang.reflect.Method;publicclassSomeClass{@SomeToken......
  • vue介绍和基本使用,插值语法,文本指令和事件指令
    1前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看 -javascript=ECMAScript(5,6,13)+Dom+Bom#2Ajax的出现->后台发送异步请求......
  • java 两个整数相除,保留两位小数
    1.情景展示两个int类型的整数相除,如何保留两位小数?5÷18=0.2777...,除不尽,保留两位小数,第二位小数的值,按第三位小数的值进行四舍五入,最终值应该是:0.28。18÷5=3.6,能除尽,只有一位小数,保留两位小数的话,第二位小数应该是0,所以最终值为:3.60。但实际结果如下。计算结果只有整数......
  • Windows和Ubuntu使用网线直连搭建局域网
    Windows配置右键网络--->属性--->更改适配器设置--->以太网--->右键属性--->TCP/IPv4--->IP地址(192.168.1.3)--->子网掩码(255.255.255.0)--->默认网关(192.168.1.1)Ubuntu配置SystemSettings--->Network--->wired--->右下角Options--->IPv4Sett......
  • java map缓存数据自动过期
     packageztest;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Timer;importjava.util.TimerTask;/***页面跳转时产生一个token*带到页面*页面保存时校验token**防止重复提交......
  • spring StateMachine简易使用
    SpringStateMachine是一个状态机框架,在Spring框架项目中,开发者可以通过简单的配置就能获得一个业务状态机,而不需要自己去管理状态机的定义、初始化等过程。今天这篇文章,我们通过一个案例学习下SpringStateMachine框架的用法。 pom依赖中添加<parent><groupId>org.......
  • Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较已经为什么禁止使用do
    场景阿里Java开发手册嵩山版中明确指出:1、BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法equals()方法会比较值和精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度2、禁止使用构造方法BigDecimal(double)的方式把double值转换为BigDecimal对象BigDeci......
  • java.lang.ClassNotFoundException: weblogic.utils.NestedException
    我单元测试的时候报这种错误Causedby:java.lang.ClassNotFoundException:weblogic.utils.NestedException atjava.net.URLClassLoader$1.run(URLClassLoader.java:202) atjava.security.AccessController.doPrivileged(NativeMethod) atjava.net.URLClassLoader.findC......
  • redis set nx
    -1永久存在键值+1......
  • Java学习问题记录
    1.特殊基本数据类型除了这两个,其他的变量都不需要加符号//定义时需要在变量的值后面加L或llongcount=300000L;//定义时需要在变量的值后面加f或Ffloatcode=10.3f;2.常量定义//在Java中使用final关键字来修饰常量,声明方式和变量类似:(通常使用大写字母表示常量)fina......