随机抽奖活动中的MyBatis的flushCache和useCache的使用

公司须要作随机抽奖活动(非大转盘,直接抽取列表),采用两种方案:java

1:mysql randmysql

select
    id, userid, license_no, engine_no, car_type, syr, sfzmhm, hphm, phone
    from cor_reward_resource
    ORDER BY RAND()
    LIMIT #{rewardLength}sql

2:java for 循环缓存

SELECT t1.id, t1.userid, t1.license_no, t1.engine_no, t1.car_type,
    t1.syr, t1.sfzmhm, t1.hphm, t1.phone
    FROM `cor_reward_resource` AS t1
    JOIN (
    SELECT ROUND(RAND() * ((
    SELECT MAX(id)
    FROM
    `cor_reward_resource`)-(
    SELECT MIN(id)
    FROM `cor_reward_resource`))+(
    SELECT MIN(id)
    FROM `cor_reward_resource`)) AS id
    ) AS t2
    WHERE t1.id >=
    t2.id
    ORDER BY t1.id
    LIMIT 1mybatis

第二种方法循环查询出的对象彻底同样,解决方案以下.net

2.1:添加随机参数,保证sql不同,避免缓存对象

SELECT t1.id, t1.userid, t1.license_no, t1.engine_no, t1.car_type,
    t1.syr, t1.sfzmhm, t1.hphm, t1.phone
    FROM `cor_reward_resource` AS t1
    JOIN (
    SELECT ROUND(RAND() * ((
    SELECT MAX(id)
    FROM
    `cor_reward_resource`)-(
    SELECT MIN(id)
    FROM `cor_reward_resource`))+(
    SELECT MIN(id)
    FROM `cor_reward_resource`)) AS id
    ) AS t2
    WHERE t1.id >=
    t2.id
    and #{cacheLoseEfficacyFlag} > -1
    ORDER BY t1.id
    LIMIT 1blog

2.2:mybatis 配置刷新不适用cacheget

<select id="selectOne" resultMap="BaseResultMap" flushCache="true" useCache="false" >配置

    SELECT t1.id, t1.userid, t1.license_no, t1.engine_no, t1.car_type,
    t1.syr, t1.sfzmhm, t1.hphm, t1.phone
    FROM `cor_reward_resource` AS t1
    JOIN (
    SELECT ROUND(RAND() * ((
    SELECT MAX(id)
    FROM
    `cor_reward_resource`)-(
    SELECT MIN(id)
    FROM `cor_reward_resource`))+(
    SELECT MIN(id)
    FROM `cor_reward_resource`)) AS id
    ) AS t2
    WHERE t1.id >=
    t2.id
    ORDER BY t1.id
    LIMIT 1
  </select>

 

 

ps:MyBatis的flushCache和useCache的使用

(1)当为select语句时:

flushCache默认为false,表示任什么时候候语句被调用,都不会去清空本地缓存和二级缓存。

useCache默认为true,表示会将本条语句的结果进行二级缓存。

(2)当为insert、update、delete语句时:

flushCache默认为true,表示任什么时候候语句被调用,都会致使本地缓存和二级缓存被清空。

 

useCache属性在该状况下没有。

当为select语句的时候,若是没有去配置flushCache、useCache,那么默认是启用缓存的,因此,若是有必要,那么就须要人工修改配置,修改结果相似下面:

  <select id="save" parameterType="XX" flushCache="true" useCache="false">  </select>  

update 的时候若是 flushCache="false",则当你更新后,查询的数据数据仍是老的数据。

相关文章
相关标签/搜索