建设公司网站源码网页设计与制作步骤
建设公司网站源码,网页设计与制作步骤,溧水建设局网站,做下载网站用阿里云的什么产品简介RedisRedis安装怎么远程连接基础命令常用类型字符串类型字典类型列表类型集合类型有序集合类型 spring boot集成Redis代码操作Redis 实现一个session储存到redis持久化缓存雪崩缓存穿透缓存击穿缓存预热 项目升级之Redis储存Session 简介Redis
Redis是一种内存数据存储系统… 简介RedisRedis安装怎么远程连接基础命令常用类型字符串类型字典类型列表类型集合类型有序集合类型 spring boot集成Redis代码操作Redis 实现一个session储存到redis持久化缓存雪崩缓存穿透缓存击穿缓存预热 项目升级之Redis储存Session 简介Redis
Redis是一种内存数据存储系统也被称为键值存储系统。之所以能这么快因为他的数据是储存在内存中在内存就意味着可能会因为断电关机而丢失但是我们的云服务器是7*24小时工作的而Redis也是有持久化机制把数据写入硬盘里RDB、AOF等 Redis支持多种数据结构如字符串、哈希、列表、集合和有序集合。它可以存储非结构化数据文本、图片、音频适用于缓存、队列等场景。 如果session存在内存只能单机部署存在Redis到时候大家都连接这个redis实现分布式。假设我觉得一台服务器处理100w客户端压力很大所以我选择两台服务器用Redis就不会说有台服务器是没有Session的情况
Redis安装
官方的redis只提供了linux版本。windows装的那都是绿色版本我们在Xshell上所以yum -y install redis
Redis启动以后台方式运行 redis-server /etc/redis.conf 默认是在etc路径
启动redis客户端redis-cli 这里注意不能带空格 怎么远程连接
1.将 redis 配置文件下载到本地: redis 配置文件是 linux 下的 /etc/redis.conf ; 找到你要下载的文件路径文件名。通过sz /路径文件名然后会谈出一个框让你选择下载到哪里
2.将 redis.conf 中的bind 127.0.0.1”注释掉
3.将 redis.conf 中的“protected-mode yes”改为“protected-mode no
4.将修改后的 redis.conf 上传至 liunx 下的 /etc 目录;将文件拖进去就能上传亲测得把原先的redis.conf配置文件删除掉再上传记得云服务器端口开放一下 5.使用命令“redis-cli shutdown” 先关 redis 服务再使用“redis-server /etc/redis.conf 启动 redis 服务。
安装Redis可视化客户端如有需要的伙伴私我发你我会在第一时间分享与你Redis没有用户名6.0以后才有用户名
基础命令
操作命令官方文档 多问问chatgpt一般我们都是通过代码来操作的比较多
常用类型
字符串类型
key-value String类型也能相加
设置过期时间 使用场景存用户登录信息、文章信息、列表信息、累计网页统计信息。string可以存万物哪怕是对象也能按json存只是要转来转去
字典类型
字典类型(Hash) 又被成为散列类型或者是哈希表类型它是将一个键值(key) 和一个特殊的“哈希表”关联起来这个“哈希表”表包含两列数据: 字段和值它就相当于 Java 中的MapString,MapString,String 结构。套娃是吧 使用
设置多个 但是这个设置多个是有问题的这一个起始的版本是4.0。我们装的是3.多所以这个是用不了的
使用HMSET设置多个时
使用场景用户对象把用户id、用户名、创建时间都传进来
列表类型
列表类型(list)是一个使用链表结构存储的有序结构它的元素插入会按照先后顺序存储到链表结构中因此它的元素操作(插入和删除)时间复杂度为 O(1)所以相对来说速度还是比较快的但它的查询时间复杂度为 O(n).因此查询可能会比较慢 使用场景 消息队列: 列表类型可以使用 push 实现先进先出的功能同时又可以使用 pop 轻松的弹出(查询并删除)第一个元素所以列表类型可以用来实现简单消息队列; 文章列表:对于博客站点来说当用户和文章都越来越多时为了加快程序的响应速度我们可以把用户自己的文章存入到 List 中因为 List 是有序的结构所以这样又可以完美的实现分页功能从而加速了程序的响应速度。
集合类型
list是先进先出可以重复set不可以重复如果存的重复就合并数据 使用场景去重复 微博关注我的人和我关注的人都适合用集合存储可以保证人员不会重复; 中奖人信息也适合用集合类型存储这样可以保证一个人不会重复中奖
集合类型 (Set) 和列表类型 (List) 的区别如下: 列表可以存储重复元素集合只能存储非重复元素 列表是按照元素的先后顺序存储元素的而集合则是无序方式存储元素的。
有序集合类型
能保证顺序能根据用户设置的值进行排序 有序集合类型(Sorted Set) 相比于集合类型多了一个排序属性 score (分值)对于有序集合 ZSet 来说每个存储元素相当于有两个值组成的一个是有序结合的元素值一个是排序值。有序集合的存储元素值也是不能重复的但分值是可以重复的。 使用场景学生成绩排名粉丝列表根据关注的先后时间排序
spring boot集成Redis
上述类型字符串类型最常用我们需要通过spring boot项目操作这些数据类型连接redis
1添加依赖
2添加配置 如果你有设置密码那这里就要写密码keyvalue默认的database有16个而我们选择默认的是0。edis不能像MySQL自己建数据库。 如果超过16个那就再搭建用一个redis服务器。 spring data redis底层基于lettuce设置的所以我们这里可以设置lettuce的信息相当于你设置redis。。后面这些可以选择性设置 默认是在内存但是可以在磁盘你可以认为有两份数据一份在内存一份在硬盘。。内存的是最新的磁盘里的会隔一段时间更新 最基本设置项
代码操作Redis
注意如果是专业版ideaAutowired会提示报错但是不影响效果
RedisTemplate是Spring Framework中的一个类用于在Java应用程序中与Redis数据库进行交互的工具。它提供了一种方便的方式来执行常见的Redis操作如存储、检索和删除数据以及执行一些高级操作如事务和管道。通过RedisTemplate您可以在Java代码中操作Redis数据库而无需直接处理底层的Redis命令。这对于在Spring应用程序中使用Redis作为数据存储和缓存非常有用。
先获取操作的opsFor……获取操作的类型。字符串类型就是value。很多重载的方法你想操作什么类型就获取什么类型 注意默认是没有设置过期时间负1 具体代码
RestController
public class RedisController {Resourceprivate RedisTemplate redisTemplate;RequestMapping(/save)public String save() {redisTemplate.opsForValue().set(userinfo, zhangsan);return ok;}RequestMapping(/get)public Object get() {return redisTemplate.opsForValue().get(userinfo);}//操作哈希RequestMapping(/save2)public String save2() {redisTemplate.opsForHash().put(myhash, username, lisi);return ok;}RequestMapping(/get2)public Object get2() {return redisTemplate.opsForHash().get(myhash, username); // lish}}执行我们现在去浏览器输入这个url触发这些执行 效果发现Redis确实有点东西
实现一个session储存到redis
需要添加多这个依赖 配置信息这些都建议设置一下namespace相当于新建文件夹储存。 spring.session.store-typeredis指定将会话Session数据存储在Redis数据库中 spring.session.redis.flush-modeon_save 意味着您选择了默认的刷新模式即在会话数据发生变化时将其刷新到Redis中。 server.servlet.session.timeout 设置会话Session的超时时间的 spring.session.redis.namespace 用来指定会话存储在Redis数据库中的命名空间namespace相当于新建文件夹储存。 存Session还是之前的方式不需要去改httpSession还是白送的只需要添加依赖和配置就行了。这就存进去了。存的时候会自动调用这个框架把你的session存到redis里。
存字符串
取字符串 session.getAttribute(SESSION_KEY_USERINFO);
存对象 存字符串不是关键我们要存对象比较关键比较对象的作用范围广很多但是有坑
现在这是一个对象使用上述的方法去存 序列化的时候报错当然是没有匹配的对象啊。实现了这个接口才能序列化将对象转换为字节流和反序列化将字节流转换回对象。这样子的话他储存会使用哈希map储存。 为什么要这样子呢 1数据持久化内存数据库的数据是易失性的意味着如果服务器重启或断电所有数据将丢失。为了保证数据的持久性可以将数据存储在硬盘上的持久化文件中。在这种情况下需要将数据序列化为字节流以便将其写入持久化文件然后在重新加载时将其反序列化为对象。 2网络传输Redis是一个多语言支持的数据库它可以被多种编程语言访问和操作。不同的编程语言使用不同的对象表示方法通过将对象序列化为通用的字节流可以跨语言地存储和检索数据。 3存储优化当对象需要在不同的机器或不同的进程之间进行传输时需要将对象转换为字节流以进行网络传输。字节流可以在网络上进行传输并在目标机器或进程上反序列化为对象。这在分布式系统中非常常见以便不同部分之间共享数据。 4支持多种编程语言Redis是一个键值存储数据库存储的是键和值对。值可以是字符串、哈希、列表等数据结构但它们都需要被转换为字节流来存储在Redis中。序列化使得存储更加紧凑节省了内存和存储空间。
如果不想序列化加这个东西把它排除掉就没法存进去的。现在你再设置这个age他也不会读到这个序列化把这个忽略了。
持久化
持久化将数据保存在硬盘而不是一直在内存防止数据的丢失 Redis持久化方式 RDB:快照方式将某⼀个时刻的内存数据以⼆进制的⽅式写⼊磁盘 AOF:文件追加方式记录所有的操作命令并以⽂本的形式追加到⽂件中 RDB、AOF结合混合持久化方式Redis 4.0 之后新增的⽅式混合持久化是结合了 RDB 和 AOF 的优点在写⼊ 的时候先把当前的数据以 RDB 的形式写⼊⽂件的开头再将后续的操作命令以 AOF 的格式存⼊⽂件这样既能保证 Redis 重启时的速度⼜能减低数据丢失的⻛险。 如何切换呢 redis-cli 命令⾏中执⾏ config set aof-use-rdb-preamble yes 来开启混合持久化当开启混合持久化时 Redis 就以混合持久化⽅式来作为持久化策略当没有开启混合持久化的情况下使⽤ config set appendonly yes 来开启 AOF 持久化的策略当 AOF 和混合持久化都没开启的情况下默认会是 RDB 持久化的⽅式。
优缺点
缓存雪崩
缓存雪崩是指在短时间内有⼤量缓存同时过期导致⼤量的请求直接查询数据库从⽽对数据库造成了巨⼤的压⼒严重情况下可能会导致数据库宕机的情况叫做缓存雪崩。 如果都不设置过期时间行不行永久的不会过期。这样子持久化的时候压力就会很大刚开始RGB刚开始有用信息可能存个10mb全部都不过期那么存个100mb。 解决方案所以加锁排队执行增加系统响应时间会牺牲一些用户体验或者随机过期时间再或者设置二级缓存Redis失效就先去查二级缓存而不是直接查数据库
设置随机过期时间
// 缓存原本的失效时间
int exTime 10 * 60;
// 随机数⽣成类
Random random new Random();
// 缓存设置
jedis.setex(cacheKey, exTimerandom.nextInt(1000) , value);
缓存穿透
缓存穿透是指查询数据库和缓存都⽆数据因为数据库查询⽆数据出于容错考虑不会将结果保存到缓存中因此每次请求都会去查询数据库这种情况就叫做缓存穿透。也会给数据库造成很大压力。 就是你叫给我托管但是你啥都没有。用户向我拿东西发现什么都没有就一直找数据库拿。数据库也是什么都没有。 解决方案 空值缓存当一个请求查询的结果在数据库中不存在时可以将这个空结果也缓存起来设置一个较短的过期时间。我们在缓存中存储一个表示空结果的占位值并为这个占位值设置一个较短的过期时间当请求到达时即使缓存中没有有效的数据也会返回这个空结果。由于过期时间较短这个占位值会很快从缓存中移除。
缓存击穿
缓存击穿指的是某个热点缓存在某⼀时刻恰好失效了然后此时刚好有⼤量的并发请求此时这些请求将会给数据库造成巨⼤的压⼒这种情况就叫做缓存击穿。
解决方案 加锁排队 此处理⽅式和缓存雪崩加锁排队的⽅法类似都是在查询数据库时加锁排队缓冲操作请求以此来减少服务器的运⾏压⼒。 设置永不过期 把热点的设置不过期这样子就不会去请求数据库但需要注意在数据更改之后要及时更新此热点缓存不然就会造成查询结果的误差。
缓存预热
系统启动的时候先把查询结果预存到缓存中以便⽤户后⾯查询时可以直接从缓存中读取以节约⽤户的等待时间。 应用程序启动就先查询数据库然后同步到缓存中 实现的三种思路 1 把需要缓存的⽅法写在系统初始化的⽅法中这样系统在启动的时候就会⾃动的加载数据并缓存数据 2把需要缓存的⽅法挂载到某个⻚⾯或后端接⼝上⼿动触发缓存预热 3设置定时任务定时⾃动进⾏缓存预热。
项目升级之Redis储存Session
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86801.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!