redis学习笔记(二)redis在springboot中的使用

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。缓存就是数据交换的缓冲区(称作:Cache),他把一些外存上的数据保存在内存上,为什么保存在内存上,我们运行的所有程序里面的变量都是存放在内存中的,所以如果想将值放入内存上,可以通过变量的方式存储。在JAVA中一些缓存一般都是通过Map集合来实现的。

一,新建springboot项目并且配置yml文件

在这里插入图片描述
redis项目的配置结构体

server:
  port: 8080
  servlet:
    context-path: /redisTest


spring:
  application:
    name: test-one
  profiles:
    active: dev
spring:
  redis:
    host: 127.0.0.1
    password:
    port: 6379
    jedis:
      pool:
        max-active: 8
        min-idle: 0
    lettuce:
      shutdown-timeout: 0

二. redis的五种数据类型

String(字符串) 、list(列表)、set(集合)、hash(散列)、Zset(有序集合)

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

新建一个测试类,并添加注解
@RunWith(SpringRunner.class)
@SpringBootTest

1.redis操作String类型
首先注入StringRedisTemplate类,然后使用redisTemplate中的方法操作redis,直接上测试代码:

/**
     * 操作String
     */
    @Test
    public void test1() {
        redisTemplate.opsForValue().set("myKey", "haiYang");
        redisTemplate.opsForValue().get("mykey");
        //点击量减少
        redisTemplate.opsForValue().decrement("myKey");
        //区别在与会判断当前的键的值是否为v,是的话不作操作,不实的话进行替换。如果没有这个键也不会做任何操作。
        redisTemplate.opsForValue().setIfPresent("", "");
        ValueOperations<String, String> valueOper = redisTemplate.opsForValue();
        RedisOperations<String, String> redisOperations = valueOper.getOperations();
        redisOperations.delete("mykey");
        //点击量计算
        valueOper.increment("aaa");
        //这三个方法和上面有些相似,区别在与会判断当前的键的值是否为v,是的话不作操作,不实的话进行替换。如果没有这个键也不会做任何操作。
        System.out.println(valueOper.setIfPresent("myKey", "haiyangaa"));
    }

2.redis操作List类型

 /**
     * 操作List
     */
    @Test
    public void test2() {
        ListOperations<String, String> valueOperations = redisTemplate.opsForList();
        RedisOperations<String, String> redisOperations = valueOperations.getOperations();
        //在redis表的上方插入数据,即数据头插入数据
        redisTemplate.opsForList().leftPush("money", "200yuan");
        //在redis表的上方插入多条数据,即数据头插入多条数据数据
        redisTemplate.opsForList().leftPushAll("", "", "", "");
        //在redis下方插入数据,即从数据尾插入数据
        redisTemplate.opsForList().rightPush("money", "800dollers");
        //在redis下方插入数据,即从数据尾插入数据
        redisTemplate.opsForList().rightPushAll("", "", "", "");
        //取redis中的表最上的一条数据
        String list1 = redisTemplate.opsForList().leftPop("money");
        System.out.println(list1);
        //取redis表中最下的一条数据
        String list2 = redisTemplate.opsForList().rightPop("money");
        System.out.println(list2);
        //取键为"key"的集合的全部
        List<String> keyList = redisTemplate.opsForList().range("money", 0, -1);
        for (String i : keyList) {
            System.out.println(i);
        }
    }

3.redis操作Hash类型
操作Hash类型可以将要存储的对象转换成JSON字符串进行存储,或者将对象序列化存储,否则存储到redis中会出现乱码,虽然可以用java取出来,但是在redis管理工具中可读性差

 /**
     * 操作Hash
     */
    @Test
    public void test3() {
        HashOperations<String, Object, Object> opsForHash = this.redisTemplate.opsForHash();

        //redis添加参数
        opsForHash.put("zoo", "three", "pig");
        //redis根据键获取键值
        opsForHash.get("zoo", "one");
        //redis删除指定的一条HASH数据
        opsForHash.delete("zoo", "two");
        //根据key值获取map对象
        opsForHash.entries("zoo");
        Object obj = JSONArray.toJSON(new User(1,"zhangsan","boy"));
        String jsonString = JSON.toJSONString(obj);
        System.out.println(jsonString);
        opsForHash.put("zoo","four", jsonString);
    }

下图为使用json存储的对象
使用json字符串存储的,该数据即为上图代码运行的测试结果
使用json字符串存储的,该数据即为上图代码运行的测试结果
redis操作Hash将对象序列化存储

 @Test
    public void test1() {
        this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        this.redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        HashOperations opsForHash = this.redisTemplate.opsForHash();
        User user = new User();
        user.setId(1);
        user.setName("李四");
        user.setSex("男");
        opsForHash.put("user".toString(), "1", user);
        User user1= (User) opsForHash.get("user","1");
        System.out.println(user1);

    }

序列化存储结果
在这里插入图片描述
4.redis操作Set类型
redis会将要存入的属性自动进行排序

    /**
     * 操作Set
     */
    @Test
    public void test4() {
        SetOperations<String, String> opsForSet = this.redisTemplate.opsForSet();
        //添加Set集合
        opsForSet.add("number", "one", "two", "three", "four");
        //取出有序集合
        opsForSet.members("number");
    }

5.redis操作ZSet类型
redis操作ZSet,第三个属性则为排序规则

  /**
     * 操作Zset
     */
    @Test
    public void test5() {
        ZSetOperations<String, String> opsForZSet = this.redisTemplate.opsForZSet();
        //添加ZSet集合,后面的数字为排序规则
        opsForZSet.add("haochide", "rou", 1);
        opsForZSet.add("haochide", "cai", 2);
    }

上面即为redis在springboot中的五种类型的基本操作,调用的方法基本满足日常开发的需要。redis的深入学习还在继续,希望各位大佬们别忘点个赞。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值