最近在學後臺,學到這了,就看看吧~~因爲剛入門,可能很多地方存在誤解或者有更優雅的實現方式,望大佬們賜教~
Redis也是一個小型數據庫(存儲數據量不大),但是是存在內存當中的,因此讀寫速度非常快,所以通常適用於那種高併發的處理場景需求,畢竟頻繁交互的話,直接訪問緩存的效率肯定是要高於直接去訪問數據庫的,從而也到達了減輕數據庫訪問壓力的目的。
安裝
畢竟也是個數據庫,因此其實跟安裝mysql大同小異,首先下載安裝包:下載地址
下載後無腦Next即可,安裝過程中,有複選框的都勾一下,安裝完成後,默認就自動啓動了已經,查看方式:右鍵我的電腦--->管理:
沒完!還要修改一個配置文件:redis.windows-service.conf,主要是添加一個密碼,方便後期通過可視化工具RedisDesktopManager來連接Redis,可以方便的查看Redis中已經存儲的數據,添加密碼如下:
修改完成後,需要重啓一下Redis服務,配置才能生效,切記!我在這就踩坑了~
代碼測試
上面的步驟順利完成後,就可以寫點僞代碼測試一下了:
添加依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>
spring.xml添加配置
<!--redis相關-->
<!--redis設置連接池-->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="300"/>
<property name="maxTotal" value="600"/>
<property name="maxWaitMillis" value="30000"/>
</bean>
<!--redis設置鏈接屬性-->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="localhost"
p:port="6379"
p:password="123456"
p:pool-config-ref="poolConfig"
p:timeout="100000"/>
編寫Controller測試方法
可以看到,存進去之後,又成功返了回來~
可視化工具查看
上面提到了RedisDesktopManager,安裝過程省略,直接看使用:
打開工具後,左下角點擊連接Redis,出現彈窗,填寫連接Redis所需信息
填完後,在點擊OK之前,可以點擊Test Connection測試一下是否能正常連接
能成功連接之後,點擊OK,左上角就會出現,點擊展開即可查看
token時效以及刷新
redis在存儲數據的時候,可以設置時效性,過期後會自動刪除,在攔截器中進行判斷:
public class MyInterceptor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");//獲取請求頭中攜帶的token信息
if (StringUtils.isEmpty(token)) {
returnResponse(response, "{\"code\":401,\"message\":\"未登錄,請重新登錄\"}");
return false;
}
if (!tokenService.hasToken(token)) {
returnResponse(response, "{\"code\":401,\"message\":\"token失效,請重新登錄\"}");
return false;
}
tokenService.verifyToken(token);
return true;
}
/**
* 響應token驗證失敗
*/
public void returnResponse(HttpServletResponse response, String responseData) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(responseData);
}
}
需要依賴支持:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!--未依賴的話編譯時報異常:java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>