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

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

 更新時(shí)間:2024年05月06日 16:08:51   作者:沙漠真有魚  
這篇文章主要介紹了Redis如何實(shí)現(xiàn)投票功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、背景介紹

投票功能是一個(gè)非常常見的Web應(yīng)用場(chǎng)景,SpringBoot作為當(dāng)今流行的Web開發(fā)框架,為了提高開發(fā)效率和性能,通常需要整合一些第三方組件。

Redis是一種高性能的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫,而Mybatis-plus則是Mybatis的擴(kuò)展版本,提供了更強(qiáng)大和便捷的數(shù)據(jù)庫操作方式。

本文將介紹如何將Redis和Mybatis-plus整合到SpringBoot中,實(shí)現(xiàn)投票功能。

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

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

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

1. 配置Redis

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

spring:
  # Redis相關(guān)配置
  redis:
    # Redis服務(wù)器IP地址
    host: localhost
    # Redis服務(wù)器端口號(hào)
    port: 6379
    # Redis服務(wù)器密碼
    password: 
    # Redis連接池最大連接數(shù)
    jedis:
      pool:
        max-active: 8
    # Redis連接池最大等待時(shí)間(單位:毫秒)
    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. 實(shí)現(xiàn)投票功能

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

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

然后創(chuàng)建投票的數(shù)據(jù)庫表vote,包含兩個(gè)字段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和對(duì)應(yīng)的XML文件VoteMapper.xml,定義增加投票數(shù)和查詢投票數(shù)的方法:

public interface VoteMapper extends BaseMapper<Vote> {
    /**
     * 增加投票數(shù)
     * @param id 投票項(xiàng)id
     * @return
     */
    int increaseCount(@Param("id") Long id);

    /**
     * 查詢投票數(shù)
     * @param id 投票項(xiàng)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 投票項(xiàng)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 投票項(xiàng)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 投票項(xiàng)id
     * @return
     */
    @PostMapping("/vote/increase")
    public String increaseCount(@RequestParam Long id) {
        voteService.increaseCount(id);
        return "success";
    }

    /**
     * 查詢投票數(shù)接口
     * @param id 投票項(xiàng)id
     * @return
     */
    @GetMapping("/vote/select")
    public Integer selectCount(@RequestParam Long id) {
        Integer count = voteService.selectCount(id);
        return count == null ? 0 : count;
    }
}

四、測(cè)試運(yùn)行

啟動(dòng)SpringBoot應(yīng)用后,在瀏覽器中訪問http://localhost:8080/vote/select?id=1,可以查詢id為1的投票項(xiàng)的投票數(shù);

再訪問http://localhost:8080/vote/increase?id=1,可以對(duì)id為1的投票項(xiàng)進(jìn)行投票。

同時(shí)可以在Redis客戶端中查看投票項(xiàng)的投票數(shù)是否正確。

五、總結(jié)

本文介紹了如何將Redis和Mybatis-plus整合到SpringBoot中,以實(shí)現(xiàn)投票功能。

其中Redis緩存可以增加應(yīng)用性能,Mybatis-plus可以簡(jiǎn)化數(shù)據(jù)庫操作。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解

    redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解

    這篇文章主要為大家介紹了redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Redis如何實(shí)現(xiàn)延遲隊(duì)列

    Redis如何實(shí)現(xiàn)延遲隊(duì)列

    這篇文章主要介紹了Redis如何實(shí)現(xiàn)延遲隊(duì)列問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 淺談redis加鎖常用幾種方式

    淺談redis加鎖常用幾種方式

    這篇文章主要介紹了淺談redis加鎖常用幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Win10配置redis服務(wù)實(shí)現(xiàn)過程詳解

    Win10配置redis服務(wù)實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Win10配置redis服務(wù)實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Redis分布式鎖存在的問題(推薦)

    Redis分布式鎖存在的問題(推薦)

    有很多基于Redis實(shí)現(xiàn)的分布式鎖方案或者庫,但是有些庫并沒有解決分布式環(huán)境下的一些問題陷阱,這篇文章主要介紹了Redis分布式鎖存在的問題,需要的朋友可以參考下
    2022-12-12
  • Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐

    Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐

    本文主要介紹了Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐,通過使用Redis的set數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)關(guān)注對(duì)象,方便高效地進(jìn)行添加和取消關(guān)注操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 排查Redis大key的方法總結(jié)

    排查Redis大key的方法總結(jié)

    這篇文章主要介紹了排查Redis大key的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • redis?protocol通信協(xié)議及使用詳解

    redis?protocol通信協(xié)議及使用詳解

    這篇文章主要為大家介紹了redis?protocol通信協(xié)議及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Redis過期數(shù)據(jù)清理的策略實(shí)戰(zhàn)

    Redis過期數(shù)據(jù)清理的策略實(shí)戰(zhàn)

    Redis中的過期鍵過期后不會(huì)立即從內(nèi)存中刪除,而是在后臺(tái)進(jìn)程中異步清理,如果不清理過期數(shù)據(jù),Redis內(nèi)存中的數(shù)據(jù)會(huì)越來越多,在實(shí)際應(yīng)用中,Redis 的過期數(shù)據(jù)淘汰策略可以通過多種方式實(shí)現(xiàn),以下是基于惰性刪除和定期刪除兩種機(jī)制的示例代碼以及最佳實(shí)踐
    2025-08-08
  • Redis緩存鍵清理問題解決

    Redis緩存鍵清理問題解決

    對(duì)于使用redis作為緩存服務(wù)器的開發(fā)者而言,定期清除redis中的緩存數(shù)據(jù)是非常必要的,本文主要介紹了Redis緩存鍵清理問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論

百色市| 庐江县| 宝鸡市| 怀安县| 南宁市| 玉山县| 抚顺县| 祁连县| 交口县| 云阳县| 桃园市| 香格里拉县| 仪陇县| 垦利县| 甘孜| 五华县| 临洮县| 军事| 缙云县| 榆中县| 通化县| 清流县| 汾阳市| 盐山县| 偏关县| 和政县| 三台县| 叙永县| 邵阳市| 东山县| 淳安县| 台北县| 许昌县| 哈密市| 资溪县| 平泉县| 桐柏县| 突泉县| 金川县| 临桂县| 牙克石市|