Map实现缓存
为什么要使用缓存
缓存最终的目的是为减轻服务端压力,减少网络传输请求
客户端缓存
浏览器访问自带缓存~~
页面缓存
浏览器缓存
App客户端缓存 IOS 前端开发 底层都有缓存技术的
(移动端登录 用token 本地是有个文件的)
如果一旦请求到服务器端之后,会在本地缓存一份,快速响应给用户。
网络缓存
代理缓存(Nginx可以缓存)
CDN缓存
服务器缓存
数据库缓存
平台缓存级缓存
缓存最终的目的是为减轻服务端压力,减少网络传输请求
Session 是存放在服务器端(保存在单个JVM中),返回SessionId(响应头),客户端存放的SessionId,下次请求时候,直接使用对于的SessionId从服务器端查询对应Session
分布式Session (Session共享的问题)----直接使用token解决
实现单个JVM缓存框架, Session Key Value 可以用Map集合实现 过期时间需要好好设计了
废话不多说,写一个给予Map集合实现Jvm缓存框架
项目目录结构:
首先定义map实现的缓存类:(concurrentHashmap保证安全)
package com.toov5.ehcache;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Component;
@Component //这样的话 就是单例的了!!!注入到容器里面
public class MapCache<K,V> {
//存放缓存容器
public ConcurrentHashMap<K, V> concurrentHashMap = new ConcurrentHashMap<K,V>();
//纯手写单个JVM缓存框架 缓存概念偏向于临时
//对传统的Map包装
public void put(K key,V value){
concurrentHashMap.put(key, value);
}
//查询
public V get(K key){
return concurrentHashMap.get(key);
}
public void remove(String k){
//这个map是安全的 不需要加锁!
concurrentHashMap.remove(k);
}
}
Controller业务类
package com.toov5.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.toov5.ehcache.MapCache;
@RestController
public class IndexController {
@Autowired
private MapCache<String, Object> mapCache;
@RequestMapping("/get")
public String get(String key){
return (String)mapCache.get(key);
}
@RequestMapping("/put")
public String put(String key, String value){
mapCache.put(key, value);
return "成功";
}
@RequestMapping("/remove")
public String remove(String key){
mapCache.remove(key);
return "成功";
}
}
App启动类:
package com.toov5.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages={"com.toov5.*"})
public class app {
public static void main(String[] args) {
SpringApplication.run(app.class, args);
}
}
运行结果
有效期设计:再开一个定时Job 每隔1S 去检查下 有过期的没 然后执行删除操作