1. package com.gss.util;
    2. import java.util.*;
    3. /**
    4. * 缓存验证码工具类
    5. */
    6. public class CacheHashMap {
    7. // 设置过期时间
    8. private static final Long timeout = 100 * 60L;
    9. // 创建一个Map用来保存数据
    10. private static Map<String, List> cache = new HashMap<>();
    11. // 设置list中的索引 0 表示数据索引
    12. private static final Integer DATA_INDEX = 0;
    13. // 设置list中的索引 1 表示保存的时间戳索引
    14. private static final Integer TIME_INDEX = 1;
    15. // 创建一个静态的Map用来保存
    16. private static CacheHashMap cacheHashMap;
    17. // 构造方法私有化不能创建对象
    18. private CacheHashMap() {
    19. }
    20. /**
    21. * 用来清理一些,用户没有用过的验证码。可以半小时来清理一次。
    22. */
    23. public static void clearData() {
    24. for (String key : cache.keySet()) {
    25. List list = cache.get(key);
    26. Long settime = (Long) list.get(TIME_INDEX);
    27. // 获取当前时间戳
    28. long nowtime = System.currentTimeMillis();
    29. if (nowtime - settime > timeout) {
    30. cache.remove(key);
    31. }
    32. }
    33. }
    34. /**
    35. * @param code 验证码
    36. * @param key 储存数据的key
    37. * @return
    38. */
    39. // 储存数据
    40. public static void putData(String key, String code) {
    41. List list = new ArrayList();
    42. list.add(code);
    43. list.add(System.currentTimeMillis());
    44. cache.put(key, list);
    45. }
    46. /**
    47. * @param key 取出数据的key
    48. * @return 返回数据值 null为不存在。
    49. */
    50. // 取出数据
    51. public static String getData(String key) {
    52. List list = cache.get(key);
    53. Object o = list.get(DATA_INDEX);
    54. Long settime = (Long) list.get(TIME_INDEX);
    55. // 获取当前时间戳
    56. long nowtime = System.currentTimeMillis();
    57. if (nowtime - settime > timeout) {
    58. cache.remove(key);
    59. return null;
    60. }
    61. cache.remove(key);
    62. return (String) o;
    63. }
    64. }