苍穹外卖学习笔记(九)

由于前面已经有系统学习Redis的文章,这里不再详细书写Redis的入门知识(数据结构、常用命令)

一. Java中操作Redis

Redis的Java客户端

常见的几种:

  1. Jedis
  2. Lettuce
  3. Spring Data Redis(建议)

Spring Data Redis使用方式

操作步骤:

  1. 导入Spring data Redis的Maven坐标
    pom.xml
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置Redis数据源
    application.yml
yml 复制代码
spring:
    redis:
        host: localhost
        port: 6379
  1. 编写配置类,创建RedisTemplate对象
    RedisConfiguration.java
java 复制代码
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建Redis模板对象.....");
        //设置Redis工厂对象
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化器
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
  1. 通过RedisTemplate操作Redis
    SpringDataRedisTest.java
java 复制代码
@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {
        redisTemplate.opsForValue().set("name", "sky");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }
}

完整测试代码:

java 复制代码
@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

    /**
     * 测试字符串
     */
    @Test
    public void testString() {
        //set get setex setnx
        redisTemplate.opsForValue().set("city", "beijing");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock", "1");
        redisTemplate.opsForValue().setIfAbsent("lock", "2");
    }

    /**
     * 测试hash
     */
    @Test
    public void testHash() {
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100", "name", "tom");
        hashOperations.put("100", "age", "20");
        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);
        hashOperations.keys("100"); //[name, age]
        hashOperations.values("100");//[tom, 20]
        hashOperations.delete("100", "age");
    }

    /**
     * 测试list
     */
    @Test
    public void testList() {
        //lpush rpush lpop rpop lrange
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("list", "a");
        listOperations.leftPush("list", "b");
        listOperations.leftPush("list", "c");
        listOperations.rightPush("list", "d");
        listOperations.rightPush("list", "e");
        listOperations.rightPush("list", "f");
        String value = (String) listOperations.leftPop("list");
        System.out.println(value);
        listOperations.range("list", 0, -1);
    }
    
    /**
     * 测试set
     */
    @Test
    public void testSet() {
        //sadd smembers srem
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set", "a", "b", "c", "d", "e");
        setOperations.remove("set", "a", "b");
        setOperations.members("set");
    }
    
    /**
     * 测试zset
     */
    @Test
    public void testZSet() {
        //zadd zrange zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset", "a", 1);
        zSetOperations.add("zset", "b", 2);
        zSetOperations.add("zset", "c", 3);
        zSetOperations.add("zset", "d", 4);
        zSetOperations.add("zset", "e", 5);
        zSetOperations.range("zset", 0, -1);
        zSetOperations.remove("zset", "a", "b");
    }

    /**
     * 通用 
     */
    @Test
    public void testCommon() {
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        Boolean city = redisTemplate.hasKey("city");
        Boolean code = redisTemplate.hasKey("code");

        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }
        redisTemplate.delete("lock");
    }
}

不用了记得注释,不然影响启动速度

相关推荐
jiayong237 分钟前
第 40 课:任务详情抽屉里的编辑 / 删除联动强化
java·开发语言·前端·javascript·vue.js·学习
Counter-Strike大牛7 分钟前
SpringBoot中使用POI+EasyExcel批量导出主子表信息,以箱单为例
windows·spring boot·后端
河阿里8 分钟前
Java八股:面试高频50
java·面试
小谢小哥13 分钟前
53-熔断降级详解
java·后端·架构
CodeMartain28 分钟前
shardingsphere-spring 实现数据分片(一)
java·后端·spring
hhb_61837 分钟前
C Shell脚本编程与系统管理技术实践指南
java·c语言·开发语言
小雅痞39 分钟前
[Java][Leetcode hard] 68. 文本左右对齐
java·开发语言·leetcode
一直跑39 分钟前
同一台服务器上(同局域网)的其他账号访问自己的数据(没有sudo权限和无 ACL和无共同组)
java·linux·服务器
梦想的颜色42 分钟前
js document 节点增删改查、样式设计全解析
java·前端·javascript
老友@1 小时前
Jenkins 中 Node 版本异常排查:Alpine + musl 导致的兼容问题(lts-alpine-jdk17)
java·servlet·jenkins