当前位置: 首页 > news >正文

有自己的网站如何做淘宝客万网域名官网

有自己的网站如何做淘宝客,万网域名官网,开网店怎么开 新手需要多少资金,博客网站开发报告文库目录 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>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置 redis 

#redis地址
spring.redis.host=x.x.x.x
#端口号
spring.redis.port=6379
spring.redis.password=
#DB[0-15]
spring.redis.database=0 
# 可省略
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms 

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>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.修改redis配置

# 设置连接的Redis数据库的索引。默认情况下,索引为0,即连接到默认的数据库。
# 如果设置多个Redis实例,可以通过此项进行区分。
spring.redis.database=0
# 设置连接的Redis服务器的主机名或IP地址
spring.redis.host=x.x.x.x
spring.redis.password=
# 设置连接的Redis服务器的端口号。在此,服务器的端口号为6379,这是Redis默认的端口号,默认的话可以省略不写。
spring.redis.port=6379
# 设置会话存储类型为Redis
spring.session.store-type=redis
# 设置服务器上所有Servlet的会话超时时间为1800秒,即30分钟。
# Spring Boot默认的会话超时时间为30分钟,但在这里,它被明确地设定为1800秒
server.servlet.session.timeout=1800
# 设置Redis的flush mode为'on_save'。flush mode决定了何时将数据写入磁盘。
# 'on_save'意味着每次数据被保存时都会立即写入磁盘,这可以保证数据的持久性,但可能会影响性能。
spring.session.redis.flush-mode=on_save
# 设置Spring Session在Redis中的命名空间为'spring:session'。
# 这是为了防止不同的应用在同一Redis实例中产生数据冲突。每个应用都可以使用不同的命名空间来保存自己的会话数据。
spring.session.redis.namespace=spring: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)

设置生成序列化版本号: 

在类上面ALT+ENTER: 

再次测试: 

5.序列化细节

(1)被序列化的类的内部的所有属性,必须是可序列化的 (基本数据类型都是可序列化的
(2)static,transient修饰的属性 不可以被序列化

再测试下: 

什么时候用static和transient?

static类共享的时候
transient:比如说银行卡的密码,不想被持久化(序列化),写到文件中假如被别人窃取了,别人可以通过反序列化把密码读出来(破解),需要保护的东西就可以用transient来修饰 

 

http://www.hrbkazy.com/news/29153.html

相关文章:

  • Wordpress演示主题哪里能搜索引擎优化
  • 2015年做那个网站致富成都自动seo
  • 黄金网站app免费视频下载全国网站排名
  • 做网站前端的软件快速网站轻松排名
  • 企业做的网站计入什么科目搜索引擎排名
  • 上海城隍庙好玩吗信息流优化师是干什么的
  • 许昌那有做网站必应搜索引擎怎么样
  • 做纺织外贸哪个贸易网站好百度产品推广怎么收费
  • wordpress博客介绍简述什么是seo及seo的作用
  • 网站建设与管理的专业群广告sem是什么意思
  • 女生做网站推广最新国内新闻10条
  • 海事网站服务平台seo的工作原理
  • 创新网站建设方案书营销关键词有哪些
  • 网站建设要注意那些问题aso优化服务
  • 做网站一单能挣多少韩国搜索引擎排名
  • 域名注册没有网站优化网站关键词排名软件
  • 视频网站开发的难点河南seo网站多少钱
  • 网站建设设计公司 知乎天津推广的平台
  • seo优化的网站百度本地惠生活推广
  • wordpress邮件发送超时武汉seo排名优化公司
  • 政府 网站管理系统 网络 架构seo如何建立优化网站
  • 二级网站有什么好处网络营销工程师
  • 如何做网站授权他达拉非片的作用及功效副作用
  • 无锡个人网站建设建站abc官方网站
  • 贸易网站建站网络营销成功案例分析
  • 微软做网站青岛网络推广公司排名
  • 郑州400建站网站建设杭州seo公司服务
  • 温州建设诚信评价网站公示新闻类软文
  • 外贸怎么上国外的网站广告公司联系方式
  • 网站建设-纵横网络网络seo推广