网络推广做哪个网站比较好,安阳县地图,电话网站源码,服务器查询目录
SpringBoot集成Redis
1.添加 redis 依赖
2.配置 redis
3.手动操作 redis
Session持久化存储到Redis
1.添加依赖
2.修改redis配置
3.存储和读取String类型的代码
4.存储和读取对象类型的代码
5.序列化细节 SpringBoot集成Redis
1.添加 redis 依赖 …目录
SpringBoot集成Redis
1.添加 redis 依赖
2.配置 redis
3.手动操作 redis
Session持久化存储到Redis
1.添加依赖
2.修改redis配置
3.存储和读取String类型的代码
4.存储和读取对象类型的代码
5.序列化细节 SpringBoot集成Redis
1.添加 redis 依赖 或将以下配置添加到 pom.xml 中 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency 2.配置 redis #redis地址 spring.redis.hostx.x.x.x #端口号 spring.redis.port6379 spring.redis.password #DB[0-15] spring.redis.database0 # 可省略 spring.redis.lettuce.pool.min-idle5 spring.redis.lettuce.pool.max-idle10 spring.redis.lettuce.pool.max-active8 spring.redis.lettuce.pool.max-wait1ms spring.redis.lettuce.shutdown-timeout100ms 3.手动操作 redis
RestController
public class RedisController {Autowiredprivate StringRedisTemplate stringRedisTemplate;// 在 redis 存储数据 30s之后自动失效RequestMapping(/set)public String set(String name, String value) {stringRedisTemplate.opsForValue().set(name, value, 30, TimeUnit.SECONDS);return Set redis success.;}// 读取 redis 中的数据RequestMapping(/get)public String get(String name) {Object valObj stringRedisTemplate.opsForValue().get(name);if (valObj ! null) {return valObj.toString();}return Null;}
}通过postman发送请求测试 下面测试存入字典Hash类型 // 在 redis 存储数据RequestMapping(/set2)public String set2() {stringRedisTemplate.opsForHash().put(myhash,name,ws);return Set redis success.;}// 读取 redis 中的数据RequestMapping(/get2)public String get2() {Object valObj stringRedisTemplate.opsForHash().get(myhash, name);if (valObj ! null) {return valObj.toString();}return Null;} Session持久化存储到Redis
1.添加依赖 或者在pom.xml中引入 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency 2.修改redis配置 # 设置连接的Redis数据库的索引。默认情况下索引为0即连接到默认的数据库。 # 如果设置多个Redis实例可以通过此项进行区分。 spring.redis.database0 # 设置连接的Redis服务器的主机名或IP地址 spring.redis.hostx.x.x.x spring.redis.password # 设置连接的Redis服务器的端口号。在此服务器的端口号为6379这是Redis默认的端口号默认的话可以省略不写。 spring.redis.port6379 # 设置会话存储类型为Redis spring.session.store-typeredis # 设置服务器上所有Servlet的会话超时时间为1800秒即30分钟。 # Spring Boot默认的会话超时时间为30分钟但在这里它被明确地设定为1800秒 server.servlet.session.timeout1800 # 设置Redis的flush mode为on_save。flush mode决定了何时将数据写入磁盘。 # on_save意味着每次数据被保存时都会立即写入磁盘这可以保证数据的持久性但可能会影响性能。 spring.session.redis.flush-modeon_save # 设置Spring Session在Redis中的命名空间为spring:session。 # 这是为了防止不同的应用在同一Redis实例中产生数据冲突。每个应用都可以使用不同的命名空间来保存自己的会话数据。 spring.session.redis.namespacespring:session 3.存储和读取String类型的代码
RestController
RequestMapping(/user)
public class UserController {// user session keyprivate static final String SESSION_KEY_USERINFO SESSION_KEY_USERINFO;RequestMapping(/set)public String set(HttpSession session) {session.setAttribute(SESSION_KEY_USERINFO, ws);return ok;}RequestMapping(/get)public String get(HttpServletRequest request) {HttpSession session request.getSession(false);Object userObj null;if (session ! null (userObj session.getAttribute(SESSION_KEY_USERINFO)) ! null) {return (String) userObj;}return Null;}
}
通过postman进行测试 4.存储和读取对象类型的代码
实体类
Data
public class UserInfo {private int id;private String username;private int age;
}
controller类
RestController
RequestMapping(/user)
public class UserController {// user session keyprivate static final String SESSION_KEY_USERINFO SESSION_KEY_USERINFO;RequestMapping(/set)public String set(HttpSession session) {//...经过一系列的判断UserInfo userInfo new UserInfo();userInfo.setId(1);userInfo.setUsername(ws);userInfo.setAge(18);session.setAttribute(SESSION_KEY_USERINFO, userInfo);return ok;}RequestMapping(/get)public UserInfo get(HttpServletRequest request) {HttpSession session request.getSession(false);Object userObj null;if (session ! null (userObj session.getAttribute(SESSION_KEY_USERINFO)) ! null) {return (UserInfo) userObj;}return null;}
}
通过postman测试发现是序列化的问题 解决方案 让UserInfo类实现序列化接口同时生成序列化版本号。 ps凡是实现Serializable接口标识接口的类都有一个表示序列化版本标识符的静态常量:private static final long serialVersionUID; serialVersionUID用来表明类的不同版本间的兼容性。简言之其目的是以序列化对象进行版本控制有关各版本反序加化时是否兼容。 如果类没有显示定义这个静态变量它的值是Java运行时环境根据类的内部细节自动生成的。若类的实例变量做了修改serialVersionUID 可能发生变化。故建议显式声明。 简单来说Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较如果相同就认为是一致的可以进行反序列化否则就会出现序列化版本不一致的异常。(InvalidCastException) 设置生成序列化版本号 在类上面ALTENTER 再次测试 5.序列化细节 1被序列化的类的内部的所有属性必须是可序列化的 基本数据类型都是可序列化的 2statictransient修饰的属性 不可以被序列化。 再测试下 什么时候用static和transient static类共享的时候transient比如说银行卡的密码不想被持久化序列化写到文件中假如被别人窃取了别人可以通过反序列化把密码读出来破解需要保护的东西就可以用transient来修饰