1 有状态Session

2 无状态Session

3 Redis-Session

3.1 使用Redis-session的好处

  • 用户认证信息存储到redis缓存中,形成无状态会话
  • 便于扩展,当单体应用扩展为集群会相当方便
  • 便于权限验证

3.2 Redis安装

  • 将Redis安装包上传到服务器
链接:https://pan.baidu.com/s/1XXTH3zv3VKNSUuKPrx8vcg
提取码:kijo
  • 解压安装包
tar -zxvf redis-4.0.11.tar.gz
  • 安装GCC
yum -y install gcc-c++
  • 进入redis安装目录,执行编译
make
  • 安装
make install PREFIX=/usr/local/redis

3.3 前台启动

cd /usr/local/redis/bin/
./redis-server

3.4 后他启动

  • 将解压目录的redis.conf复制到安装目录
cp redis.conf /usr/local/redis/bin/
  • 修改配置文件 redis.conf
bind 0.0.0.0 # 默认127.0.0.1,开启远程访问
daemonize yes # 默认前台启动 no,开启后他启动
port 6379 # 默认端口
requirepass changeme # 默认访问不需要密码
  • 后台启动
./redis-server redis.conf

  • 本地登录测试
  • 客户端登录
  • 默认存储在db0

4 Spring Boot 集成 Redis

4.1 依赖

     <!-- 引入 redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><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>1.8.7.RELEASE</version></dependency>

4.2 基本配置

############################################################
#
# REDIS 配置
#
############################################################
# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=121.36.70.255
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=imooc
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=1000
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=2
# 连接超时时间(毫秒)
spring.redis.timeout=0

4.3 工具类

package com.imooc.utils;import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;/*** @Description: 使用redisTemplate的操作实现类 */
@Component
public class RedisOperator {//  @Autowired
//    private RedisTemplate<String, Object> redisTemplate;@Autowiredprivate StringRedisTemplate redisTemplate;// Key(键),简单的key-value操作/*** 实现命令:TTL key,以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。* * @param key* @return*/public long ttl(String key) {return redisTemplate.getExpire(key);}/*** 实现命令:expire 设置过期时间,单位秒* * @param key* @return*/public void expire(String key, long timeout) {redisTemplate.expire(key, timeout, TimeUnit.SECONDS);}/*** 实现命令:INCR key,增加key一次* * @param key* @return*/public long incr(String key, long delta) {return redisTemplate.opsForValue().increment(key, delta);}/*** 实现命令:KEYS pattern,查找所有符合给定模式 pattern的 key*/public Set<String> keys(String pattern) {return redisTemplate.keys(pattern);}/*** 实现命令:DEL key,删除一个key* * @param key*/public void del(String key) {redisTemplate.delete(key);}// String(字符串)/*** 实现命令:SET key value,设置一个key-value(将字符串值 value关联到 key)* * @param key* @param value*/public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}/*** 实现命令:SET key value EX seconds,设置key-value和超时时间(秒)* * @param key* @param value* @param timeout*            (以秒为单位)*/public void set(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);}/*** 实现命令:GET key,返回 key所关联的字符串值。* * @param key* @return value*/public String get(String key) {return (String)redisTemplate.opsForValue().get(key);}// Hash(哈希表)/*** 实现命令:HSET key field value,将哈希表 key中的域 field的值设为 value* * @param key* @param field* @param value*/public void hset(String key, String field, Object value) {redisTemplate.opsForHash().put(key, field, value);}/*** 实现命令:HGET key field,返回哈希表 key中给定域 field的值* * @param key* @param field* @return*/public String hget(String key, String field) {return (String) redisTemplate.opsForHash().get(key, field);}/*** 实现命令:HDEL key field [field ...],删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。* * @param key* @param fields*/public void hdel(String key, Object... fields) {redisTemplate.opsForHash().delete(key, fields);}/*** 实现命令:HGETALL key,返回哈希表 key中,所有的域和值。* * @param key* @return*/public Map<Object, Object> hgetall(String key) {return redisTemplate.opsForHash().entries(key);}// List(列表)/*** 实现命令:LPUSH key value,将一个值 value插入到列表 key的表头* * @param key* @param value* @return 执行 LPUSH命令后,列表的长度。*/public long lpush(String key, String value) {return redisTemplate.opsForList().leftPush(key, value);}/*** 实现命令:LPOP key,移除并返回列表 key的头元素。* * @param key* @return 列表key的头元素。*/public String lpop(String key) {return (String)redisTemplate.opsForList().leftPop(key);}/*** 实现命令:RPUSH key value,将一个值 value插入到列表 key的表尾(最右边)。* * @param key* @param value* @return 执行 LPUSH命令后,列表的长度。*/public long rpush(String key, String value) {return redisTemplate.opsForList().rightPush(key, value);}}

Redis-Session无状态会话技术相关推荐

  1. Drools 学习笔记(一)----stateless session(无状态会话) 的使用

    关于Drools: Drools是jboss的一款开源的业务规则引擎,具有速度快.效率高.易学习的特点. 本文内容参考自Drools 官方文档 7.9.0.Final版 https://docs.jb ...

  2. 「小程序JAVA实战」java-sesion的状态会话与无状态会话(38)

    转自:https://idig8.com/2018/09/02/xiaochengxujavashizhanjava-sesiondezhuangtaihuihuayuwuzhuangtaihuihu ...

  3. spring 多租户_使用Spring Security的多租户应用程序的无状态会话

    spring 多租户 从前, 我发表了一篇文章,解释了构建无状态会话的原理 . 巧合的是,我们再次为多租户应用程序执行同一任务. 这次,我们将解决方案集成到Spring Security框架中,而不是 ...

  4. 无状态会话的ejb_Java EE状态会话Bean(EJB)示例

    无状态会话的ejb 在本文中,我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态. 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息,并在整个会话中保留该信 ...

  5. 使用Spring Security的多租户应用程序的无状态会话

    从前, 我发表了一篇文章,解释了构建无状态会话的原理 . 巧合的是,我们再次针对多租户应用程序执行同一任务. 这次,我们将解决方案集成到Spring Security框架中,而不是自己构建身份验证机制 ...

  6. 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别

    最近部门组织学习EJB3,到statelessbean和stateFul之间的区别这个地方卡壳了.原因是对这个没有深刻的理解.以下是它们的区别和应用场合. 1   无状态   (Stateless)  ...

  7. 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别

    有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别 1 无状态 (Stateless) 在不同方法调用间不保留任何状态 . 事务处理必须在一个方法中结束 . 通常资源占用较少:可以 ...

  8. 无状态会话bean(1)---定义

    无状态会话bean用于完毕在单个方法的生命周期内的操作.无状态bean能够实现很多业务操作,可是每一个方法都不能假定不论什么其它的方法会在它之前调用.后半句的意思是如今的你可能不是刚才的你.明天的你可 ...

  9. 关于drools有状态会话和无状态会话到底有何区别的看法

    关于有状态会话和无状态的会话的区别,很多人不能真正理解,小哥也不是很理解,但也有些看法,以下是官网翻译而来 一.有状态会话常见用例: 1. 监测 半自动买入股票市场监控与分析.  2. 诊断  故障查 ...

最新文章

  1. win7 64位操作系统中 Oracle 11g 安装教程(图解)
  2. java不同工厂生产不同电器_完整案例分析再加知识整合——艾特抽象工厂模式,超详细的...
  3. 分支-03. 三天打鱼两天晒网(Switch…case)
  4. Ubuntu 环境中多线程下载工具Axel的安装与使用
  5. js+php在线截图 jquery fileupload.js,另一种图片上传 jquery.fileupload.js
  6. centos7查看当前cpu运行模式_杂集:centos7中设置服务开机自启的两种方法,欢迎补充...
  7. NAT网关之SNAT进阶使用(二)构建ECS级别SNAT出网方式
  8. 2020新电商营销白皮书
  9. CSS3_线性渐变(linear-gradient)+ 盒子阴影(box-shadow)
  10. eclipse实用编辑快捷键
  11. linux端口映射转发工具- rinetd安装使用
  12. 清华天才王垠受邀面试阿里P9,被P10面跪后网上怒发文,惨打325的P10赵海平回应了!...
  13. 大数据的核心价值是什么
  14. Python 二进制数与十进制数转换表的制作
  15. 论文阅读:RGCF: Refined Graph Convolution Collaborative Filering with Concise and Expressive Embedding
  16. 西门子1500PLC机器人焊接程序(西门子PLC+西门子触摸屏)
  17. 【Python】list写入txt文件
  18. 哈希消息认证码HmacSHA256-javascript版
  19. 2db多少功率_功率和dB的关系很详细
  20. 小语种翻译配音的软件推荐

热门文章

  1. 一道笔试题(vue,react)
  2. chromedriver与chrome版本映射表
  3. python 常用算法学习(1)
  4. Sublime Text 3 python和Package Control配置方法
  5. 云计算数据挖掘Mahout下的机器学习
  6. MOSS Content Types 概述
  7. android 方向控制界面,Android Studio屏幕方向以及UI界面状态的保存代码详解
  8. 简述python垃圾回收机制_python中的垃圾回收机制简述
  9. jvm 参数_6个重要的JVM性能参数
  10. 电子科大计算机大类包括专业,电子科技大学a类学科有哪些?附电子科大a类学科名单...