SpringBoot 第十六篇 之 Redis 基本数据类型操作

本文详细介绍了如何在SpringBoot应用中使用Redis进行基本数据类型的存取操作,包括字符串、列表、集合和哈希表。通过实例代码展示了设置、获取以及操作这些类型数据的方法,为SpringBoot开发者提供了实用的Redis操作教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.chenyun.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisZSetCommands;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.Jedis;

import java.util.*;

@Controller
@ResponseBody
public class HelloRedisController {

    @RequestMapping("/test")
    public Map<String,Object> helloRedis(){

        Map<String,Object> map = new HashMap<>();
        map.put("success",true);
        map.put("asadfa","aad");

        return map;

    }


    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping("/stringAndHash")
    public Map<String,Object> testStringAndHash(){

        redisTemplate.opsForValue().set("key1","value1");

        //注意这里使用了JDK序列化器,所以redis保存时不是整数,不能运算
        redisTemplate.opsForValue().set("int_key","1");

        // 使用运算
        stringRedisTemplate.opsForValue().set("int","1");

        // 获取底层jedis链接
        Jedis jedis = (Jedis)stringRedisTemplate.getConnectionFactory().getConnection()
                .getNativeConnection();
        // 这个命令redisTemplate 不支持,所i我们先获取底层链接再操作
        jedis.decr("int");

        Map<String,String> hash = new HashMap<String, String>();
        hash.put("field1","value1");
        hash.put("field2"," value2");
        //  存入一个散列数类型
        stringRedisTemplate.opsForHash().putAll("hash",hash);

        //新增一个字段
        stringRedisTemplate.opsForHash().put("hash","field3","value3");
        // 绑定散列字段的key,这样可以链接对同一个散列数据类型进行操作
        BoundHashOperations hashOps = stringRedisTemplate.boundHashOps("hash");
        // 删除两个字段
        hashOps.delete("field1","field2");
        //新增一个字段
        hashOps.put("field4","value4");

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("success",true);
        return map;



    }

    /**
     * 使用spring 操作链表(list)
     * 特性是:查询性能不高,增加删除节点性能高
     * */
    @RequestMapping("/list")
    public Map<String,Object> testList(){

        // 插入两个列表,注意他们在链表的顺序
        // 链表从左到右的顺序为v10,v8,v4,v2
        stringRedisTemplate.opsForList().leftPushAll("list1","v2","v4","v8","v10");
        // 链表从左到右的顺序为 v1,v2,v3,v5
        stringRedisTemplate.opsForList().rightPushAll("list2","v1","v2","v3","v5");

        // 绑定链表2操作
        BoundListOperations listops = stringRedisTemplate.boundListOps("list2");
        // 从右边弹出一个成员
        Object result1 = listops.rightPop();

        // 获取定位元素,Redis从0 开始,这里值为v2
        Object result2 = listops.index(1);

        // 从左边插入链表
        listops.leftPush("v0");

        // 求链表长度
        Long size = listops.size();

        // 求链表下标区间成员,整个链表下标范围0 到 size-1 ,这里不取最后一个元素
        List elements = listops.range(0, size-2);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("success",true);
        map.put("elements",elements);
        map.put("result1",result1);
        map.put("result2",result2);

        return map;
    }

    /**
     * 操作集合set
     * 特性,集合不允许重复,无顺序
     * */
    @RequestMapping("/set")
    public Map<String, Object> testSet() {
        stringRedisTemplate.opsForSet().add("set1","v1","v2","v3","v4");
        // 绑定集合操作
        BoundSetOperations setOps = stringRedisTemplate.boundSetOps("set1");
        // 增加元素
        setOps.add("v6", "v7");
        // 删除元素
        setOps.remove("v1");
        // 返回所有元素
        Set set1 = setOps.members();
        // 返回所有元素
        Long size = setOps.size();

        Map<String, Object>  map = new HashMap<>();
        map.put("set1",set1);
        return map;

    }

    /**
     * redis 提供有序集合zset,有序集合和集合差异不大,也是一种散列
     * 存储的方式,同时它的有序性只是靠它在树结构中增加一个属性-score分数
     * 为了支持这个变化,spring 提供了TypedTuple接口, 并定义了两个方法,
     * spring 还提供默认实现类,DefaultTypedTuple
     * */
    @RequestMapping("/zset")
    public void testZset(){
        Set<ZSetOperations.TypedTuple<String>> typedTuples = new HashSet<>();
        for (int i=1;i<=9;i++){
            // 分数
            double score = i*0.1;
            // 创建一个TypedTuple对象,存入值和分数
            ZSetOperations.TypedTuple<String> typedTuple = new DefaultTypedTuple<String>("value"+i,score);
            typedTuples.add(typedTuple);
        }

        //在集合中插入元素
        stringRedisTemplate.opsForZSet().add("zset1",typedTuples);

        // 绑定集合操作
        BoundZSetOperations<String,String> zSetOperations = stringRedisTemplate.boundZSetOps("zset1");

        // 增加一个元素
        zSetOperations.add("value10",0.26);
        Set<String> setScore = zSetOperations.range(1,6);
        // 按分数获取有序集合
        Set<String> setLex = zSetOperations.rangeByScore(0.2,0.6);
        //  定义值的范围
        RedisZSetCommands.Range range = new RedisZSetCommands.Range();
        // 大于value3
        range.gt("value3");
        // 大于等于value3
        range.gte("value3");

        // 删除元素
        zSetOperations.remove("value9");
        // 按分值从大到小排序
        Set<String> reverseSet =zSetOperations.reverseRange(2,8);

    }





}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值