在java中操作Redis

Redis的java客户端

在这里插入图片描述

使用方式

在这里插入图片描述
在这里插入图片描述

配置Redis

导入依赖

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

配置属性

  • 在application-dev.yml配置具体的参数
  • 在application.yml记性引用

dev文件

sky:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    host: localhost
    port: 3306
    database: sky_take_out
    username: root
    password: root
  redis:
    host: localhost
    port: 6379
    # 密码 默认没有密码
    # password: root
    # 数据库索引 0-15
    database: 0
    timeout: 10000

application.yml文件

spring:
  profiles:
    active: dev
  main:
    allow-circular-references: true
  datasource:
    druid:
      driver-class-name: ${sky.datasource.driver-class-name}
      url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
      username: ${sky.datasource.username}
      password: ${sky.datasource.password}
  redis:
    host: ${sky.redis.host}
    port: ${sky.redis.port}
    # 密码 默认没有密码
    # password: ${sky.redis.password}
    # 数据库索引 0-15
    database: ${sky.redis.database}
    timeout: ${sky.redis.timeout}

编写配置类

在这里插入图片描述

RedisConfiguration类

/**
 * Redis配置
 */
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置序列化器 用于序列化key 防止key乱码
        redisTemplate.setKeySerializer(redisTemplate.getStringSerializer());
        log.info("RedisTemplate加载完成");
        return redisTemplate;
    }
}

测试

在这里插入图片描述

@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 字符串类型测试
     */
    @Test
    public void test() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name", "小猫");
        String name = (String) valueOperations.get("name");
        System.out.println(name);

        // 设置过期时间
        valueOperations.set("age", "18");
        // 设置过期时间 10秒
        redisTemplate.expire("age", 10, java.util.concurrent.TimeUnit.SECONDS);
        // 获取过期时间
        Long expire = redisTemplate.getExpire("age");
        System.out.println(expire);

        // 如果key存在则不设置,否则设置
        Boolean absent = valueOperations.setIfAbsent("age", "20");
        System.out.println(absent);
    }
 }   

字符串操作

    /**
     * 字符串类型测试
     */
    @Test
    public void test() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name", "小猫");
        String name = (String) valueOperations.get("name");
        System.out.println(name);

        // 设置过期时间
        valueOperations.set("age", "18");
        // 设置过期时间 10秒
        redisTemplate.expire("age", 10, java.util.concurrent.TimeUnit.SECONDS);
        // 获取过期时间
        Long expire = redisTemplate.getExpire("age");
        System.out.println(expire);

        // 如果key存在则不设置,否则设置
        Boolean absent = valueOperations.setIfAbsent("age", "20");
        System.out.println(absent);



    }

操作哈希

    /**
     * 哈希类型测试
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("user", "name", "小猫");
        hashOperations.put("user", "age", "18");
        String name = (String) hashOperations.get("user", "name");
        String age = (String) hashOperations.get("user", "age");
        System.out.println(name);
        System.out.println(age);
        // 获取所有的key
        hashOperations.keys("user").forEach(System.out::println);
        // 删除属性name
        hashOperations.delete("user", "name");
        // 删除整个hash
        redisTemplate.delete("user");
    }

操作列表

    /**
     * 列表类型测试
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        // 从左边插入
        listOperations.leftPush("list", "a");
        listOperations.leftPush("list", "b");
        listOperations.leftPush("list", "c");
        // 从左边弹出
        String value = (String) listOperations.leftPop("list");
        System.out.println(value);

        // 从右边插入
        listOperations.rightPush("list", "d");
        listOperations.rightPush("list", "e");
        listOperations.rightPush("list", "f");
        // 从右边弹出
        value = (String) listOperations.rightPop("list");
        System.out.println(value);

        // 获取指定范围的元素
        listOperations.range("list", 0, -1).forEach(System.out::println);
        // 删除元素 1表示删除一个元素
        listOperations.remove("list", 1, "d");
    }

操作集合

    /**
     * 集合类型测试
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        // 添加元素
        setOperations.add("set", "a", "b", "c", "d", "e");
        // 添加重复元素 无效
        setOperations.add("set", "a", "b", "c", "d", "e");
        // 获取元素 无序
        setOperations.members("set").forEach(System.out::println);
    }

操作zset

    /**
     * 有序集合类型测试
     */
    @Test
    public void testZSet(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        // 添加元素
        zSetOperations.add("zset", "a", 1);
        zSetOperations.add("zset", "b", 2);
        zSetOperations.add("zset", "c", 99);
        zSetOperations.add("zset", "d", 4);
        // 获取元素 有序 从小到大
        System.out.println("获取元素");
        zSetOperations.range("zset", 0, -1).forEach(System.out::println);
        // 获取指定分数范围的元素
        System.out.println("获取指定分数范围的元素");
        zSetOperations.rangeByScore("zset", 1, 3).forEach(System.out::println);
        // 获取元素和分数
        System.out.println("获取元素和分数");
        zSetOperations.rangeWithScores("zset", 0, -1).forEach(System.out::println);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值