springboot中使用redis

redis在springboot中使用示例

引入依赖

创建好的springboot工程,是引入了springboot的依赖的,继承springboot的子项目,其中使用的就是springboot工程的版本,对于springboot-1.x 和 2.x来说,对于redis的依赖是不一样的,否则redis连接可能会出错;这里以2.x为例,2.x直接将配置放置在了父工程的依赖管理中,我们直接使用下面的依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

配置redis

引入依赖完成了,但是需要使用redis,我们需要先有一个redis,如果没有的话,可以看看docker快速启动一个redis,这里假设已经有了redis,springboot提供了许多中间件的自动装配功能,引入了上面的依赖,redis的自动装配就会被扫描,然而初始化redis连接的条件是要配置了redis的连接,我们可以在工程的: application.properties(默认)/application.yml(推荐使用,手动改后缀)中配置我们的redis连接:

spring:
  redis:
    host: localhost #redis服务地址
    port: 6379 #服务端口默认6379
    database: 0 # reids中的数据库编号
    jedis:  # 连接设置
      pool: # 连接池参数
        max-active: 40  # 最大活跃线程
        max-idle: 10    # 最大等待连接数
        max-wait: 3000  # 等待连接超时时间

开始使用

使用之前,首先先要保证自己的redis能够连接(可以使用redis-cli命令行或者redis-desktop manager查看)。接下来需要使用redis做一个最简单的使用示例,由于我们在项目中配置了reids,springboot的自动装配就帮我们注入了RedisTemplate, 我们可以直接操作RedisTemplate,使用其中的模板方法(设计模式中的一种), 推荐使用StringRedisTemplate,如果是简单操作的话;

@Repository
public class RedisTest {

    @Autowried
    private RedisTemplate redistemplate;

    public void set(String key, Object value) {
        redistemplate.opsForValue().set(key, value);
    }

    public Object get(String key) {
        return redistemplate.opsForValue().get(key);
    }

}

这样可以进行测试,但是可能会出现一些问题,特别是在做转换的时候,那是因为们少了一些配置,如果使用StringRedisTemplate操作的话,简单测试是比较简单的;

使用配置

redis中的数据存储是需要序列化和反序列化的,所以我们需要配置和redis通信之间的序列化方案,否则,key可能无法正常命中, value可能不是预计的值;一般来说我们使用可能会存储json比较多,可以配置将redis的key的序列化方式配置成string类型的序列化,而value的序列化方式配置成json序列化,但是我个人不是很喜欢直接配置成json序列化,而是全都使用string的方式,由业务来处理json数据的转换;

// 主要就是RedisTemplate中的方法:
redistemplate.setKeySerializer(serializer); //设置key的
redistemplate.setValueSerializer(serializer); //设置value的
redistemplate.setHashKeySerializer(serializer); //设置hash数据中的key的
redistemplate.setHashValeSerializer(serializer); //设置hash数据中的value的

//对于serializer,提供有一下几种,也可以自行实现:
JdkSerializationRedisSerializer // jdk的序列化方案;
Jackson2JsonRedisSerializer //jackson 转json的方案;
StringRedisSerializer //字符串的方案 (目前最常用的方案)
... //还有几种不常用,也可以自己实现;

相关操作

在redis中提供许多种类的数据结构,在springboot中我们如何愉快的操作他们呢, RedisTemplate当然已经帮我们封装好了;


// 操作简单的字符串:
redistemplate.opsForValue();
// 操作List
redistemplate.opsForList();
// 操作 Set
redistemplate.opsForSet();
// 操作 Zset
redistemplate.opsForZSet();
// 操作hash
redistemplate.opsForHash();
... //以上是常用的,还有如地理坐标等的操作,使用到可以再看;

每种操作返回的是一个封装好的CURD的Operations,对应的是不同的方法操作;基本上和redis-cli中的操作都能由对应;

发布订阅

发布订阅是redis的一个附加功能,没有专业的消息队列那么强大,对于一些简单的数据分享场景可能也会使用到:

//消息的发送
redisTemplate.convertAndSend("topic", "message");

// 消息的订阅接收, 主要就是注册2个对象,可以放在一个@Configuration中
// 这个对象声明订阅的主题;
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter responseListenerAdapter) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(responseListenerAdapter, new PatternTopic("topic"));
    return container;
}

//这个对象定义好消息如何处理, 就是自己定义一个对象,将对象和处理的方法名称作为参数传入;
@Bean
public MessageListenerAdapter loginListenerAdapter() {
    return new MessageListenerAdapter("这里传入一个处理器的类", "处理器中处理方法的名称");
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容