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

河北移动端网站建设有网打不开网页咋回事

河北移动端网站建设,有网打不开网页咋回事,设计网站都有什么,微博如何做的跟网站一样✅作者简介#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者#xff0c;修心和技术同步精进。 #x1f34e;个人主页#xff1a;Java Fans的博客 #x1f34a;个人信条#xff1a;不迁怒#xff0c;不贰过。小知识#xff0c;大智慧。 #x1f49e;当前专栏… ✅作者简介2022年博客新星 第八。热爱国学的Java后端开发者修心和技术同步精进。 个人主页Java Fans的博客 个人信条不迁怒不贰过。小知识大智慧。 当前专栏SpringBoot 框架从入门到精通 ✨特色专栏国学周更-心性养成之路 本文内容SpringBoot 项目整合 Redis 教程详解 文章目录 Redis 的优势Redis 安装Redis 数据类型1.String字符串2.Hash哈希3.List列表4.Set集合5.ZSetsorted set有序集合 SpringBoot 操作 RedisSpringBoot 配置 RedisRedisTemplate 及其相关方法1.RedisTemplate 介绍2.Redis 5种数据结构操作 Redis 业务实践 Redis 是完全开源的遵守 BSD 协议是一个高性能的 key-value 数据库. Redis 与其他 key - value 缓存产品有以下三个特点 Redis支持数据的持久化可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据同时还提供listsetzsethash等数据结构的存储。Redis支持数据的备份即master-slave模式的数据备份。 Redis 的优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s丰富的数据类型 – Redis支持二进制案例的 String, List, Hash, Set 及 zset数据类型操作。原子 – Redis的所有操作都是原子性的意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务即原子性通过MULTI和EXEC指令包起来。丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性Redis 是单线程的6.0版本开始支持开启多线程。 Redis 安装 下载地址 https://github.com/tporadowski/redis/releases。 解压下载后的压缩文件解压后文件列表如下 使用cmd窗口打开Redis redis-server.exe redis.windows.conf #加载配置文件启动 注启动之后不要关闭窗口关闭窗口服务停止 安装Redis数据库客户端 库相关指令 flushdb 清空当前库flushall 清空所有库select 1 切换库key的相关指令 指令作用语法del删除一个或多个keydel keynameexists判断一个或多个key是否存在多个key时有一个存在则就会返回1exists keynameexpire设置key的生存时间 单位 秒expire keyname secondskeys查询所有匹配模式的key 匹配一个字符 *匹配0-n个字符 [] 满足其中的一个key * key h?llomove将key移动到指定的库中move keyname dbpexpire设置key的生存时间 单位 毫秒 设置成功返回1 否则返回0pexpire keyname millisecondsttl以秒为单位返回key的剩余生存时间返回-1表示永久存储-2表示key不存在ttl keynamerandomkey从当前数据库中随机的返回一个keyrandomkeyrename重命名key成功返回ok否则返回错误信息。rename key newkeytype返回key所存储的值的类型type keyname Redis 数据类型 1.String字符串 string 是 redis 最基本的类型你可以理解成与 Memcached 一模一样的类型一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型string 类型的值最大能存储 512MB。 操作指令 命令描述SET设置指定 key 的值GET获取指定 key 的值。GETRANGE返回 key 中字符串值的子字符GETSET将给定 key 的值设为 value 并返回 key 的旧值(old value)。SETEX将值 value 关联到 key 并将 key 的过期时间设为 seconds (以秒为单位)。SETNX只有在 key 不存在时设置 key 的值STRLEN返回 key 所储存的字符串值的长度。MSET同时设置一个或多个 key-value 对。MSETNX同时设置一个或多个 key-value 对当且仅当所有给定 key 都不存在INCR将 key 中储存的数字值增一INCRBY将 key 所储存的值加上给定的增量值incrementINCRBYFLOAT将 key 所储存的值加上给定的浮点增量值incrementDECR将 key 中储存的数字值减一。DECRBYkey 所储存的值减去给定的减量值decrementAPPEND如果 key 已经存在并且是一个字符串 APPEND 命令将指定的 value 追加到该 key 原来值value的末尾 2.Hash哈希 Redis hash 是一个键值(keyvalue)对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表hash 特别适合用于存储对象。 操作指令 命令描述hset设置一个key/value对hget获取key对应的valuehgetall获取所有的key/value对hdel删除某个key/value对hexists判断一个key是否存在hkeys获取所有的keyhvals获取所有的valuehmset设置多个key/valuehmget获取多个key的valuehsetnx设置一个不存在的key的值hincrby为value的值进行加法运算hincrbyfloat为value的值进行加浮点类型值运算 3.List列表 Redis 列表是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边。 操作指令 命令描述LINDEX通过索引获取列表中的元素 lindex lists 0LINSERT key BEFORE|AFTER在列表的元素前或者后插入元素LLEN获取列表长度LPOP移出并获取列表的第一个元素LPUSH将一个或多个值插入到列表头部LPUSHX将一个值插入到已存在的列表头部LRANGE获取列表指定范围内的元素 0 -1LREM移除列表重复元素LSET通过索引设置列表元素的值 但是索引必须存在实质是根据索引修改值LTRIM对一个列表进行修剪(trim)就是说让列表只保留指定区间内的元素不在指定区间之内的元素都将被删除RPOP移除列表的最后一个元素返回值为移除的元素RPOPLPUSH移除列表的最后一个元素并将该元素添加到另一个列表并返回RPUSH在列表中添加一个或多个值RPUSHX为已存在的列表添加值 4.Set集合 Redis 的 Set 是 string 类型的无序集合。集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。 操作指令 命令描述sadd为集合添加元素smembers显示集合中所有元素 无序scard返回集合中元素的个数spop随机返回一个元素并将这个元素删除smove从一个集合向令一个集合中转移元素srem从集合中删除一个元素sismember判断集合中是否包含这个元素srandmember随机返回一个元素sinter求交集sunion求和集 5.ZSetsorted set有序集合 Redis ZSet 和 Set 一样也是 String 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。ZSet 的成员是唯一的,但分数(score)却可以重复。 操作指令 命令描述zadd添加一个有序集合元素zcard返回集合中元素的个数zrange升序 zrevrange降序返回一个范围内的元素zrangebyscore按照分数查找一个范围内的元素zrank返回排名zrevrank倒叙排名zscore显示某个元素的分数zrem移除某个元素zincrby给某个特定元素加分 SpringBoot 操作 Redis spring boot data redis中提供了RedisTemplate和StringRedisTemplate其中StringRedisTemplate是Redistemplate的子类两个方法基本一致不同之处主要体现在操作的数据类型不同RedisTemplate中的两个泛型都是Object意味着存储的key和value都可以是一个对象而StringRedisTemplate的两个泛型都是String意味着StringRedisTemplate的key和value都只能是字符串。 引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependencySpringBoot 配置 Redis spring:redis:# Redis数据库索引默认为0database: 0# Redis服务器地址host: 127.0.0.1# Redis服务器连接端口port: 6379# Redis服务器连接密码默认为空password:# 连接池最大连接数使用负值表示没有限制jedis.pool.max-active: 20# 连接池最大阻塞等待时间使用负值表示没有限制jedis.pool.max-wait: -1# 连接池中的最大空闲连接jedis.pool.max-idle: 10# 连接池中的最小空闲连接jedis.pool.min-idle: 0# 连接超时时间毫秒timeout: 1000RedisTemplate 及其相关方法 1.RedisTemplate 介绍 Spring封装了RedisTemplate对象来进行对Redis的各种操作它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下。RedisTemplate提供了redis各种操作、异常处理及序列化支持发布订阅。 2.Redis 5种数据结构操作 redisTemplate.opsForValue(); //操作字符串redisTemplate.opsForHash(); //操作hashredisTemplate.opsForList(); //操作listredisTemplate.opsForSet(); //操作setredisTemplate.opsForZSet(); //操作有序set 或者 redistempalate.boundValueOpsredistempalate.boundSetOpsredistempalate.boundListOpsredistempalate.boundHashOpsredistempalate.boundZSetOps opsForXXX和boundXXXOps的区别XXX为value的类型前者获取一个operator但是没有指定操作的对象key可以在一个连接事务内操作多个key以及对应的value后者获取了一个指定操作对象key的operator在一个连接事务内只能操作这个key对应的value。 SpringBootTest 实现Redis数据库增删改查 /*** 使用RedisTemplate 操作Redis数据的不同数据类型*/ SpringBootTest public class Springbootday03ApplicationTests {Autowiredprivate RedisTemplateString, String redisTemplate;/*** String 类型数据操作*/Testpublic void operateString() {//添加值redisTemplate.opsForValue().set(str, strValue1);//添加值 判定是否存在 存在则不添加Boolean aBoolean redisTemplate.opsForValue().setIfAbsent(str, strAbsent);System.out.println(str设置成功: aBoolean);//获取值String str redisTemplate.opsForValue().get(str);System.out.println(str str);//更新值redisTemplate.opsForValue().set(str, strValue2);str redisTemplate.opsForValue().get(str);System.out.println(newStr str);//删除值Boolean b redisTemplate.delete(str);System.out.println(str删除成功 b);}/*** 操作string类型数据 设置过期时间*/Testpublic void operateString2() {redisTemplate.opsForValue().set(str, strTimeout, 10, TimeUnit.SECONDS);//判定值是否存在 不存在则设置值 同时设置过期时间Boolean aBoolean redisTemplate.opsForValue().setIfAbsent(str2, strTimeoutAbsent, 20, TimeUnit.SECONDS);System.out.println(setIfAbsent: aBoolean);}/*** 操作hash类型数据*/Testpublic void operateHash() {//添加hash类型数据 key - valueredisTemplate.opsForHash().put(hash, username, admin);//修改hash类型数据redisTemplate.opsForHash().put(hash, username, tom);redisTemplate.opsForHash().put(hash, password, 123456);//添加hash类型数据 key - mapHashMapString, String map new HashMap();map.put(driverName, com.mysql.jdbc.Driver);map.put(url, jdbc:mysql://localhost:3306/mybatis?serverTimezoneUTC);redisTemplate.opsForHash().putAll(hash, map);//获取hash类型数据 entriesMapObject, Object hash redisTemplate.opsForHash().entries(hash);hash.forEach((key, value) - {System.out.println(key :: value);});//获取所有的keySetObject keys redisTemplate.opsForHash().keys(hash);for (Object key : keys) {System.out.println(key: key);}//获取所有valueListObject values redisTemplate.opsForHash().values(hash);values.forEach(value - System.out.println(value: value));//删除hash类型数据 删除一个 返回删除的个数Long delete redisTemplate.opsForHash().delete(hash, username);System.out.println(delete delete);//删除hash类型数据 删除多个 返回删除的个数delete redisTemplate.opsForHash().delete(hash, username, password, driverName);System.out.println(delete delete);//删除hash类型数据 删除所有Boolean delHash redisTemplate.delete(hash);System.out.println(delHah: delHash);}/*** 操作List类型 有序 可重复*/Testpublic void operateList() {//左压栈// redisTemplate.opsForList().leftPush(list, listValue1);// redisTemplate.opsForList().leftPush(list, listValue1);// redisTemplate.opsForList().leftPush(list, listValue2);// redisTemplate.opsForList().leftPush(list, listValue3);//右压栈redisTemplate.opsForList().rightPush(list, listValue0);redisTemplate.opsForList().rightPush(list, listValue2);redisTemplate.opsForList().rightPush(list, listValue0);//左出栈String list1 redisTemplate.opsForList().leftPop(list);System.out.println(leftPop list1 list1);//右出栈String list2 redisTemplate.opsForList().rightPop(list);System.out.println(rightPop list2 list2);//获取所有数据ListString lists redisTemplate.opsForList().range(list, 0, redisTemplate.opsForList().size(list) - 1);lists.forEach(list - System.out.println(list));//设置指定位置的数据redisTemplate.opsForList().set(list, 0, listValue0);/*** 从存储在键中的列表中删除等于值的元素的第一个计数事件。* count 0删除等于从左到右移动的值的第一个元素* count 0删除等于从右到左移动的值的第一个元素* count 0删除等于value的所有元素。*/Long remove redisTemplate.opsForList().remove(list, -1, listValue0);System.out.println(remove: remove);//删除指定key的list数据Boolean list redisTemplate.delete(list);System.out.println(list集合删除成功: list);}/*** 操作Set类型 无序 不可重复*/Testpublic void operateSet() {//设置set值redisTemplate.opsForSet().add(set, setValue0);redisTemplate.opsForSet().add(set, setValue0);redisTemplate.opsForSet().add(set, setValue1);//判定是否包含Boolean member redisTemplate.opsForSet().isMember(set, setValue0);System.out.println(isMember: member);//删除set中的值Long remove redisTemplate.opsForSet().remove(set, setValue0);System.out.println(remove remove);//获取set类型值SetString set redisTemplate.opsForSet().members(set);set.forEach(str - {System.out.println(str str);});}/*** 操作 ZSet 有序 不可重复*/Testpublic void operateZSet() {//存储值Boolean add redisTemplate.opsForZSet().add(zset, zsetValue0, 10);System.out.println(add add);System.out.println(add add);add redisTemplate.opsForZSet().add(zset, zsetValue2, 2);System.out.println(add add);//获取值// Boolean zset redisTemplate.delete(zset);// System.out.println(delete zset zset);} }Redis工具类的封装 /*** Redis 工具类* author mosin* date 2021/11/30* version 1.0*/ Component public final class RedisUtil {private RedisUtil(){};Autowiredprivate RedisTemplateString,String redisTemplate;//设置值public void setValue(String key,String value){redisTemplate.opsForValue().set(key, value);}// 设置值 同时设置有效时间public void setValue(String key, String value, Long timeOut, TimeUnit timeUnit){redisTemplate.opsForValue().setIfAbsent(key, value, timeOut, timeUnit);}//设置值 没有则设置 有则不设置public void setNx(String key,String value){redisTemplate.opsForValue().setIfAbsent(key, value);}//设置值 没有则设置 同时设置有效时间 有则不设置public void setNx(String key,String value,long timeOut,TimeUnit timeUnit){redisTemplate.opsForValue().setIfAbsent(key, value,timeOut,timeUnit);}//删除值public boolean del(String key){return redisTemplate.delete(key);}//获取值public String getValue(String key){return redisTemplate.opsForValue().get(key);} }Redis 业务实践 redis 存储 token实现非法请求拦截 1.编写拦截器 Component public class AdminInterceptor implements HandlerInterceptor {Autowiredprivate RedisUtil redisUtil;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(拦截器以拦截请求);//从请求头中获取token 验证用户是否登录String token request.getHeader(token);System.out.println(token);String tokenValue redisUtil.getValue(token);System.out.println(tokenValue tokenValue);if(tokenValue!null){ //用户已登录 放行请求return true;}else{//重定向到登录页面response.sendRedirect(request.getContextPath()/login.jsp);return false;}} }2.配置拦截器 Configuration public class LoginConfig implements WebMvcConfigurer {Autowiredprivate AdminInterceptor adminInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {InterceptorRegistration registration registry.addInterceptor(adminInterceptor);registration.addPathPatterns(/**);registration.excludePathPatterns(/user/login,/user/register,/login.jsp);} }3.编写统一返回数据格式类 Data AllArgsConstructor NoArgsConstructor Builder public class JsonResultT {private Integer code;private String msg;private Long count;private T data; }4.编写控制器 Controller RequestMapping(/user) public class UserController {Autowiredprivate UserService userService;Autowiredprivate RedisUtil redisUtil;ResponseBodyRequestMapping(/login)public Object login(User user) throws JsonProcessingException {User usr User.builder().id(1).name(admin).password(123456).build();//获取token 放入redisString token UUID.randomUUID().toString().replace(-, );//将user 转为json格式放入 redisObjectMapper objectMapper new ObjectMapper();String s1 objectMapper.writeValueAsString(usr);//将 token 和用户信息存入 redisredisUtil.setValue(token, s1, 2L, TimeUnit.MINUTES);//将token 存入map集合返回HashMapString, String map new HashMap();map.put(token, token);return map;}ResponseBodyRequestMapping(/register)public Object register(User user){HashMapString, String map new HashMap();map.put(msg, ok);return map;}ResponseBodyRequestMapping(/add)public Object add(User user){HashMapString, String map new HashMap();map.put(msg, ok);return map;} }5.编写业务类和Mapper接口 6.使用postman接口测试工具测试接口 码文不易本篇文章就介绍到这里如果想要学习更多Java系列知识点击关注博主博主带你零基础学习Java知识。与此同时对于日常生活有困扰的朋友欢迎阅读我的第四栏目《国学周更—心性养成之路》学习技术的同时我们也注重了心性的养成。
http://www.w-s-a.com/news/833757/

相关文章:

  • 网站建设公司销售招聘常用的搜索引擎有哪些?
  • wordpress中.htaccess新上线的网站怎么做优化
  • 家教网站怎么做网站建设品牌推荐
  • 青岛做外贸网站建设茶叶公司网站建设策划书
  • 个人电脑做网站主机三合一网站
  • 用html框架做网站怎么在.Net中做团购网站
  • 怎样建一个自己公司的网站制作网站需要钱吗
  • 联盟网站制作wap网站制作公司
  • 美丽乡村建设发展论坛网站wordpress 仿站 教程网
  • 浙江省建设注册管理中心网站首页优设设计网站导航
  • 台州小型网站建设国内免费的建网站平台
  • 自己做网站不推广网站建设工作室发展
  • 有女人和马做网站吗宁波seo优势
  • 网站做用户记录表电商运营推广计划方案
  • 网站备案认领杭州网页设计公司招聘
  • 易签到网站开发设计做网站运营有前途吗
  • 南通网站建设心得2023必考十大时政热点
  • 苍溪建设局网站公建设计网站
  • 九歌人工智能诗歌写作网站电子商务网站建设项目书
  • 做外贸的经常浏览的三个网站律师做哪个网站好
  • 中国公路建设招标网站长沙大型网站建设公司
  • 沈阳企业网站模板建站注册电子邮箱免费注册
  • 如何做简洁网站设计企业网站排名优化方案
  • 东莞网站建设服务商做触屏网站
  • 外国网站代理音乐网站建设
  • 珠江网站建设广安广告公司
  • 高端创意网站建设网页制作咨询公司
  • 网站建设及发布的流程图wordpress文章摘要显示
  • 淮北网站网站建设省好多会员app
  • 如何查看网站的更新频率网站图片要求