如何直接写入数据到redis

如何直接写入数据到redis

课程中只教了如何从mysql中读取数据后,缓存到redis。但是没有教如何直接写入前端传入的数据。

比如前端传入参数后,生成了一个购物车的实例对象,我想把这个购物车的对象,不写到mysql里,而直接写到redis,下次也直接从redis中取,这要怎么实现?springboot难道也用Jedis么?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

redis一般不会这样被拿来直接使用哦,redis还是做缓存数据库,从数据库中取信息的,

理解同学说的这种情况, 是不是考虑类似于未登录情况下的京东购物车呢?

如果是,可以把数据存到cookies里哦。

如果是想了解如何直接往redis中存数据:

http://img1.sycdn.imooc.com//climg/5f82a6e1092db40a07240752.jpg

如果想存一个对象,可以使用存储Map的方式,但需要转换成<String,String>类型的map

例如,我要存一个User:

http://img1.sycdn.imooc.com//climg/5f829e33093d402607490349.jpg

package com.imooc;
import java.util.HashMap;

import com.imooc.domain.User;

import redis.clients.jedis.Jedis;
 
public class RedisJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        // 如果 Redis 服务设置来密码,需要下面这行,没有就不需要
        // jedis.auth("123456"); 
        System.out.println("连接成功");
        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());
        
        User user = new User(1,"zhangsan","1234");
        //创建一个<String, String>类型的map
        HashMap<String, String> hashMap = new HashMap<String, String>();
        //存的时候,把user转换成字符类型的:
        hashMap.put(String.valueOf(user.getUsername()), String.valueOf(user));
        //使用hmset方法存入
        jedis.hmset("user", hashMap);
        // 获取存储的数据并输出
       System.out.println("redis 存储的字符串为: "+ jedis.hgetAll("user"));
      
    }
    
    
}


但一般我们不会这样去使用redis的,多数还是从数据库中获取,缓存到redis中。

springboot也可以使用Jedis的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕丝1539783 提问者 #1
    因为我朋友跟我说,所有数据都可以存储在redis,很多数据是经常被修改和访问的(比如高并发抢购,生成的数据可以直接先存储在redis中,因为速度更快,等抢购结束后再写入到mysql)。 如果在application.properties中已经配置了redis数据库连接,说明springboot对redis已经提供支持了,不应该再用Jedis这么原始的方式去操作。 上网搜了一下,应该用RedisTemplate或者StringRedisTemplate这两个类去操作redis数据库,大致方法和思路我会了。 但是又产生两个新问题。 第一个问题:数据不经过mysql直接写入redis,对于redis的写入操作是否也需要编写在dao层?网上说直接service层写入redis就好了,RedisTemplate和StringRedisTemplate这两个类就相当于dao层。 第二个问题:redis和mysql存储不同数据,比如redis存储购物车表的数据,除了购物车表以外的其他表存放在mysql,那事务应该怎么处理?用@Transactional也能控制redis的事务么?
    2020-10-11 21:51:11
  • 好帮手慕阿慧 回复 提问者 慕丝1539783 #2
    同学你好, 1、redis的写入操作不需要写dao层,直接调用RedisTemplate对象中的方法就可以了。同学可以将RedisTemplate类当做dao层。 2、使用Redis事务首先要设置RedisTemplate的enableTransactionSupport属性为true,然后配置一个jdbc的事务管理器。 用@Transactional也能控制redis的事务。 祝学习愉快~
    2020-10-12 10:15:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师