(Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三

这里介绍的是redis中使用各种方式存/取值:


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import io.lettuce.core.ScriptOutputType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * @Author:JCccc
 * @Description:
 * @Date: created in 18:13 2019/6/9
 */
@RestController
@RequestMapping("testRedis")
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    //Set集合数据操作
    @GetMapping("addDataOfSet")
    public void DataOfSet() {
        Set<String> set1=new HashSet<String>();
        set1.add("TestData1");
        set1.add("TestData2");
        set1.add("TestData3");
        //存入Set集合数据
        redisTemplate.opsForSet().add("setData",set1);
        //获取Set集合数据
        Set<Object> resultSet =redisTemplate.opsForSet().members("setData");
        System.out.println("resultSet:"+resultSet);
    }
    //Map集合数据操作
    @GetMapping("addDataOfMap")
    public void DataOfMap() {
        Map<String,String> map=new HashMap<String,String>();
        map.put("key1","测试值1");
        map.put("key2","测试值2");
        map.put("key3","测试值3");
        map.put("key4","测试值4");
        map.put("key5","测试值5");
        //TODO 存储map数据到redis里面的方法一,以字符串格式存进去,顺便设置了过期时间
        redisTemplate.opsForValue().set("SessionMap", map, 60, TimeUnit.SECONDS);
        //取值method1,对应方法一,把map数据(STRING)格式取出来,赋予给OBJECT,可以转换json对象
        Object StrMapObj=redisTemplate.boundValueOps("SessionMap").get();
        String json= JSON.toJSONString(StrMapObj);
        System.out.println(json);
        //JSONObject jsonObject = JSONObject.parseObject(json);
        // 取值method2,取出来直接赋予给MAP
        Map<String, String>  strMap= (Map<String, String>) redisTemplate.boundValueOps("SessionMap").get();
        System.out.println(strMap.toString());
        //TODO 存入map数据到redis里面的方法二,以map形式存进去,这种情况过期时间默认调的是配置文件里面的
        // redisTemplate.opsForHash().putAll("mapData",map);
        //以下为方法二的取值方式,其实就是操作map
       // Map<Object, Object> resultMap= redisTemplate.opsForHash().entries("mapData");
       // List<Object> resultMapList=redisTemplate.opsForHash().values("mapData");
       // Set<Object> resultMapSet=redisTemplate.opsForHash().keys("mapData");
        //String value=(String)redisTemplate.opsForHash().get("mapData","key1");
       // System.out.println("通过单一的key去取值value:"+value);
       // System.out.println("通过Set集合方式取值resultMapSet:"+resultMapSet);
       // System.out.println("通过Map方式取值resultMap:"+resultMap);
       // System.out.println("通过List方式取值resulreslutMapListtMap:"+resultMapList);
    }
    //List集合数据操作
    @GetMapping("addDataOfList")
    public void DataOfList() {
        List<String> list1=new ArrayList<>();
        list1.add("listA的测试值a1");
        list1.add("listA的测试值a2");
        list1.add("listA的测试值a3");
        List<String> list2=new ArrayList<>();
        list2.add("listB的测试值b1");
        list2.add("listB的测试值b2");
        list2.add("listB的测试值b3");
        redisTemplate.opsForList().leftPush("listDataA",list1);
        redisTemplate.opsForList().rightPush("listDataB",list2);
          //存完后可以看redis数据库,数据已写入
        //以下的取list值方式是通过 直接将列表的元素从左或右取出, 一旦取完,redis数据库对应的键值也会没了,因为用的是leftPop方法,实际上List这个集合redisTemplate提供了非常多的方法
//leftPush(K key, V value) 
//index(K key, long index) 
//range(K key, long start, long end)
//leftPush(K key, V pivot, V value)
//size
//非常多,有兴趣可以去了解对redis的list数据结构操作方法
        List<String> resultList1= (List<String>) redisTemplate.opsForList().leftPop("listDataA");
        System.out.println(resultList1);
        List<String> resultList2= (List<String>) redisTemplate.opsForList().rightPop("listDataB");
        System.out.println(resultList2);
    }
    //普通key-value值操作
    @GetMapping("addDataOfKeyValue")
    public void DataOfKeyValue() {
        redisTemplate.opsForValue().set("测试key1","测试value1");
        redisTemplate.opsForValue().set("测试key2","测试value2");
        redisTemplate.opsForValue().set("测试key3","测试value3");
        redisTemplate.opsForValue().set("测试key4","测试value4");
        String result1=redisTemplate.opsForValue().get("测试key1").toString();
        String result2=redisTemplate.opsForValue().get("测试key2").toString();
        String result3=redisTemplate.opsForValue().get("测试key3").toString();
        System.out.println("缓存结果为:result:"+result1+"  "+result2+"   "+result3);
    }
    //stringRedisTemplate对字符串值得存与取
    @GetMapping("stringRedisTemplate")
    public void stringRedisTemplate() {
        stringRedisTemplate.opsForValue().set("TEST_STRING","stringRedisTemplate");
        String result= stringRedisTemplate.opsForValue().get("TEST_STRING");
        System.out.println("缓存结果为:result:"+result);
    }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
124 1
|
3月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
57 2
数据的存储--Redis缓存存储(二)
|
3月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
87 6
|
5月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
|
21天前
|
存储 消息中间件 监控
Redis Stream:实时数据流的处理与存储
通过上述分析和具体操作示例,您可以更好地理解和应用 Redis Stream,满足各种实时数据处理需求。
59 14
|
2月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
63 13
|
2月前
|
存储 NoSQL Redis
【赵渝强老师】Redis的存储结构
Redis 默认配置包含 16 个数据库,通过 `databases` 参数设置。每个数据库编号从 0 开始,默认连接 0 号数据库,可通过 `SELECT &lt;dbid&gt;` 切换。Redis 的核心存储结构包括 `dict`、`expires` 等字段,用于处理键值和过期行为。添加键时需指定数据库信息。视频讲解和代码示例详见内容。
|
4月前
|
存储 NoSQL Redis
2)Redis 的键值对长什么样子,又是怎么存储的?
2)Redis 的键值对长什么样子,又是怎么存储的?
83 0
|
5月前
|
存储 消息中间件 NoSQL
Redis命令详解以及存储原理
Redis命令详解以及存储原理
|
5月前
|
存储 NoSQL Redis
Redis存储原理与数据模型
Redis存储原理与数据模型