最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Mybatis-plus和Redis實現(xiàn)投票功能

 更新時間:2023年05月31日 10:26:51   作者:FeereBug  
投票功能是一個非常常見的Web應(yīng)用場景,這篇文章將為大家介紹一下如何將Redis和Mybatis-plus整合到SpringBoot中,實現(xiàn)投票功能,感興趣的可以了解一下

一、背景介紹

投票功能是一個非常常見的Web應(yīng)用場景,SpringBoot作為當今流行的Web開發(fā)框架,為了提高開發(fā)效率和性能,通常需要整合一些第三方組件。Redis是一種高性能的鍵值對存儲數(shù)據(jù)庫,而Mybatis-plus則是Mybatis的擴展版本,提供了更強大和便捷的數(shù)據(jù)庫操作方式。本文將介紹如何將Redis和Mybatis-plus整合到SpringBoot中,實現(xiàn)投票功能。

二、開發(fā)環(huán)境

  • JDK 1.8
  • SpringBoot 2.5.0
  • Redis 6.2.4
  • Mybatis-plus 3.4.3
  • IntelliJ IDEA

三、技術(shù)實現(xiàn)

1. 配置Redis

在SpringBoot的配置文件application.yml中添加Redis的配置:

spring:
  # Redis相關(guān)配置
  redis:
    # Redis服務(wù)器IP地址
    host: localhost
    # Redis服務(wù)器端口號
    port: 6379
    # Redis服務(wù)器密碼
    password: 
    # Redis連接池最大連接數(shù)
    jedis:
      pool:
        max-active: 8
    # Redis連接池最大等待時間(單位:毫秒)
    lettuce:
      pool:
        max-wait: -1ms
    timeout: 5000ms

2. 配置Mybatis-plus

在SpringBoot的配置類中添加Mybatis-plus的配置:

@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {
    /**
     * Mybatis-plus分頁插件配置
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    /**
     * Mybatis-plus通用Mapper配置
     */
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
        scannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        scannerConfigurer.setBasePackage("com.example.mapper");
        return scannerConfigurer;
    }
}

3. 實現(xiàn)投票功能

首先創(chuàng)建一個投票的實體類Vote,包含投票項的id和投票數(shù)count:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Vote implements Serializable {
    private Long id;
    private Integer count;
}

然后創(chuàng)建投票的數(shù)據(jù)庫表vote,包含兩個字段id和count,id為主鍵:

CREATE TABLE `vote` (
  `id` bigint(20) NOT NULL,
  `count` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

接著創(chuàng)建投票的Mapper接口VoteMapper和對應(yīng)的XML文件VoteMapper.xml,定義增加投票數(shù)和查詢投票數(shù)的方法:

public interface VoteMapper extends BaseMapper<Vote> {
    /**
     * 增加投票數(shù)
     * @param id 投票項id
     * @return
     */
    int increaseCount(@Param("id") Long id);
    /**
     * 查詢投票數(shù)
     * @param id 投票項id
     * @return
     */
    int selectCount(@Param("id") Long id);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.VoteMapper">
    <!-- 增加投票數(shù) -->
    <update id="increaseCount">
        update vote set count = count + 1
        where id = #{id}
    </update>
    <!-- 查詢投票數(shù) -->
    <select id="selectCount" resultType="int">
        select count
        from vote
        where id = #{id}
    </select>
</mapper>

接下來創(chuàng)建投票的Service類VoteService,其中增加投票數(shù)和查詢投票數(shù)的方法使用了Redis緩存:

@Service
public class VoteService {
    @Autowired
    private VoteMapper voteMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     ** @param id 投票項id
     */
    public void increaseCount(Long id) {
        ValueOperations<String, Object> operations = redisTemplate.opsForValue();
        String key = "vote:" + id;
        // 先從緩存中獲取投票數(shù)
        Integer count = (Integer) operations.get(key);
        // 如果緩存中沒有,則從數(shù)據(jù)庫中獲取,并存入緩存
        if (count == null) {
            count = voteMapper.selectCount(id);
            if (count != null) {
                operations.set(key, count);
            }
        }
        // 如果緩存中有,則增加投票數(shù)并更新緩存
        if (count != null) {
            operations.increment(key);
            voteMapper.increaseCount(id);
        }
    }
    /**
     * 查詢投票數(shù)
     * @param id 投票項id
     * @return
     */
    public Integer selectCount(Long id) {
        ValueOperations<String, Object> operations = redisTemplate.opsForValue();
        String key = "vote:" + id;
        // 先從緩存中獲取投票數(shù)
        Integer count = (Integer) operations.get(key);
        // 如果緩存中沒有,則從數(shù)據(jù)庫中獲取,并存入緩存
        if (count == null) {
            count = voteMapper.selectCount(id);
            if (count != null) {
                operations.set(key, count);
            }
        }
        return count;
    }
}

最后創(chuàng)建投票的Controller類VoteController,提供增加投票數(shù)和查詢投票數(shù)的接口:

@RestController
public class VoteController {
    @Autowired
    private VoteService voteService;
    /**
     * 增加投票數(shù)接口
     * @param id 投票項id
     * @return
     */
    @PostMapping("/vote/increase")
    public String increaseCount(@RequestParam Long id) {
        voteService.increaseCount(id);
        return "success";
    }
    /**
     * 查詢投票數(shù)接口
     * @param id 投票項id
     * @return
     */
    @GetMapping("/vote/select")
    public Integer selectCount(@RequestParam Long id) {
        Integer count = voteService.selectCount(id);
        return count == null ? 0 : count;
    }
}

四、測試運行

啟動SpringBoot應(yīng)用后,在瀏覽器中訪問http://localhost:8080/vote/select?id=1,可以查詢id為1的投票項的投票數(shù);再訪問http://localhost:8080/vote/increase?id=1,可以對id為1的投票項進行投票。同時可以在Redis客戶端中查看投票項的投票數(shù)是否正確。

五、總結(jié)

本文介紹了如何將Redis和Mybatis-plus整合到SpringBoot中,以實現(xiàn)投票功能。其中Redis緩存可以增加應(yīng)用性能,Mybatis-plus可以簡化數(shù)據(jù)庫操作。代碼已上傳至Github:https://github.com/chatbot-ai/spring-boot-redis-mybatis-vote。

到此這篇關(guān)于SpringBoot整合Mybatis-plus和Redis實現(xiàn)投票功能的文章就介紹到這了,更多相關(guān)SpringBoot Redis投票內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Redis中的動態(tài)字符串學(xué)習(xí)教程

    Redis中的動態(tài)字符串學(xué)習(xí)教程

    這篇文章主要介紹了Redis中的動態(tài)字符串學(xué)習(xí)教程,以sds模塊的使用為主進行講解,需要的朋友可以參考下
    2015-08-08
  • Redis如何實現(xiàn)投票功能

    Redis如何實現(xiàn)投票功能

    這篇文章主要介紹了Redis如何實現(xiàn)投票功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Redis熱點Key獨立集群實現(xiàn)方案(核心思路)

    Redis熱點Key獨立集群實現(xiàn)方案(核心思路)

    文章介紹了Redis熱點Key獨立集群實現(xiàn)方案,通過多實例配置、靈活的路由規(guī)則和統(tǒng)一的訪問接口,實現(xiàn)資源隔離、靈活擴展、高可用性和統(tǒng)一管理,部署架構(gòu)、注意事項和擴展建議也為方案的實施提供了指導(dǎo),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 通過kubesphere部署redis的方法

    通過kubesphere部署redis的方法

    這篇文章主要介紹了通過kubesphere部署redis的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Redis fork進程分配不到內(nèi)存解決方案

    Redis fork進程分配不到內(nèi)存解決方案

    這篇文章主要介紹了Redis fork進程分配不到內(nèi)存解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • redis分布式鎖的問題與解決方法

    redis分布式鎖的問題與解決方法

    這篇文章主要給大家介紹了關(guān)于redis分布式鎖的問題與解決方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Redis Cluster集群增加和刪除節(jié)點方式

    Redis Cluster集群增加和刪除節(jié)點方式

    本文詳細介紹了如何在Redis集群中添加和刪除節(jié)點,包括啟動新節(jié)點、分配槽位、設(shè)置從節(jié)點等操作步驟,通過這些步驟,確保Redis集群的穩(wěn)定性和高效性
    2026-06-06
  • 基于Redis實現(xiàn)阻塞隊列的方式

    基于Redis實現(xiàn)阻塞隊列的方式

    本文主要講解基于?Redis?的方式實現(xiàn)異步隊列,基于?Redis?的?list?實現(xiàn)隊列的方式也有多種,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 緩存替換策略及應(yīng)用(以Redis、InnoDB為例)

    緩存替換策略及應(yīng)用(以Redis、InnoDB為例)

    本文以Redis、InnoDB為例給大家講解緩存替換策略及應(yīng)用,本文給大家提到五種置換策略,通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • Redis字符串類型的常用命令小結(jié)

    Redis字符串類型的常用命令小結(jié)

    這篇文章給大家整理了在操作Redis字符串類型中的常用命令,文章總結(jié)的很全面,對大家學(xué)習(xí)Redis具有一定的參考借鑒價值,下面來一起看看吧。
    2016-09-09

最新評論

双牌县| 红桥区| 收藏| 泸定县| 木里| 瑞丽市| 临汾市| 乌兰县| 乳源| 永新县| 永新县| 齐齐哈尔市| 大石桥市| 光泽县| 平罗县| 襄城县| 木里| 神池县| 香港| 乌兰县| 建德市| 防城港市| 偃师市| 石屏县| 临猗县| 乐陵市| 蚌埠市| 崇阳县| 滕州市| 青岛市| 绍兴市| 绥滨县| 南投县| 县级市| 普兰店市| 霍州市| 莎车县| 丹寨县| 万载县| 万荣县| 景德镇市|