IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java从Redis中存取数据 -> 正文阅读

[大数据]Java从Redis中存取数据

这里记录一个写购物车数据到redis,即普通的方式写入key,value数据格式被覆盖问题。

先说明一下SpringRedisTemplate写入Redis是正常的字符串;RedisTemplate写入到redis是byte串,需要对RedisTemplate进行转化。

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 600, redisFlushMode = RedisFlushMode.IMMEDIATE)
public class RedisSingleConfig {

	@SuppressWarnings("rawtypes")
	@Bean(name = "redisTemplate")
	public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(factory);
		return template;
	}

}

存数据:

写入数据到redis的写法一:

/**
  *String.format(CART_REDIS_KEY_TEMPLATE,uid是生成的redisKey
  *gson.toJson(new Cart(product.getId(),quantity,cartAddForm.getSelected()))是value
  *也就是可以简化为redisTemplate.opsForValue().set(redisKey,value)
*/
redisTemplate.opsForValue().set(String.format(CART_REDIS_KEY_TEMPLATE,uid),
                gson.toJson(new Cart(product.getId(),quantity,cartAddForm.getSelected())));

上述的redisKey是拼接的用户id生成的,value是新加入的购物车数据,那么第二次加入购物车时,因为key相同,数据是会覆盖的。

解决上面的问题写法二:

把数据存在map,也就是redis里面的hash

HashOperations<String,String,String> opsForValue=redisTemplate.opsForHash();
// redis中的key
String redisKey=String.format(CART_REDIS_KEY_TEMPLATE,uid);
// 此处可忽略,只是为了下面的数量变动
String value=opsForValue.get(redisKey,String.valueOf(product.getId()));
Cart cart;
if (StringUtil.isEmpty(value)){
// 没有该商品,新增
cart=new Cart(product.getId(),quantity,cartAddForm.getSelected());
}else {
// 已经存在,数量+1
cart=gson.fromJson(value,Cart.class);
cart.setQuantity(cart.getQuantity()+quantity);
}
// 存入数据
opsForValue.put(redisKey,String.valueOf(product.getId()),gson.toJson(cart));

?cart_1:redisKey

key:此处为商品id

value:是写入的数据

读取数据:

// 从redis查到数据
HashOperations<String,String,String> opsForValue=redisTemplate.opsForHash();
String redisKey=String.format(CART_REDIS_KEY_TEMPLATE,uid);

Map<String, String> entries = opsForValue.entries(redisKey);
// entries 的值为 {27={"productId":27,"quantity":2,"productSelected":true},26={"productId":26,"quantity":1,"productSelected":true}}
log.info(entries+"---------------------------------------");
for (Map.Entry<String,String> entry: entries.entrySet()) {
     // productId
     Integer productId =Integer.valueOf(entry.getKey()) ;
     // 得到cart对象
     Cart cart=gson.fromJson(entry.getValue(), Cart.class);
}

参照上面redis里面数据的结构更容易理解

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:28:20  更:2022-04-01 23:30:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 6:33:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码