网站布局的重要性wordpress视频主题下载地址

news/2025/9/27 17:31:21/文章来源:
网站布局的重要性,wordpress视频主题下载地址,中山企业网络推广方案,服务器做视频网站吗Redis是一个开源、高性能、内存键值存储数据库#xff0c;由 Salvatore Sanfilippo#xff08;网名antirez#xff09;创建#xff0c;并在BSD许可下发布。它不仅可以用作缓存系统来加速数据访问#xff0c;还可以作为持久化的主数据存储系统或消息中间件使用。Redis因其数…Redis是一个开源、高性能、内存键值存储数据库由 Salvatore Sanfilippo网名antirez创建并在BSD许可下发布。它不仅可以用作缓存系统来加速数据访问还可以作为持久化的主数据存储系统或消息中间件使用。Redis因其数据结构丰富、性能优异和高可用性而被广泛应用在现代分布式架构中。 目录 一、认识Redis 1.1、认识NoSQL 1.2、认识Redis 1.3、安装Redis 二、Redis的常见命令 2.1、5种常见的数据结构 2.2、通用命令 2.3、不同数据结构的操作命令 三、Redis的Java客户端 3.1、Jedis客户端 3.2、SpringDataRedis客户端 一、认识Redis 1.1、认识NoSQL SQL结构化、表有关联、支持SQL查询、满足事务的ACID、存储在磁盘、垂直扩展、适用于数据结构固定相关业务的数据安全性与一致性要求高的场合 NoSQL非结构、无关联的、非SQL、满足基本一致性、存储在内存、水平扩展、适用于数据结构不固定对一致性与安全性要求不高但是对性能要求较高的场合 常见的NoSQL有键值对类型的Redis、文档类型的MongoDB 1.2、认识Redis Redis( Remote Dictionary Server)的全程是远程字典服务器是一个基于内存的非关系型数据库。 redis的特征 1.键值对类型的数据库支持丰富的数据类型 2.单线程每个命令具备原子性 3.低延迟速度快(基于内存、IO多路复用、良好的编码) 4.支持数据的持久化 5.支持主从集群与分片集群 6.支持多语言客户端 1.3、安装Redis 这个不过多介绍直接下载安装即可。 安装redis服务器和客户端并安装redis可视化管理工具Another Redis Desktop Manager。 二、Redis的常见命令 2.1、5种常见的数据结构 redis是一个键值对类型的数据库key的类型一般是Stringvalue的类型就多种多样 基本数据类型 String类型缓存用户信息、计数器例如点赞数、浏览量、简单的键值对存储等。 Hash类型存储用户属性集合如用户的姓名、年龄、地址等、产品详情等多字段数据结构。 List类型存储用户属性集合如用户的姓名、年龄、地址等、产品详情等多字段数据结构。 Set类型适用于标签系统给一篇文章打上多个标签、唯一事件记录等。 SortedSet类型跳跃表提供O(log N)级别的插入、删除和查找操作并按分数排序。 特殊数据类型 GEO类型Geo数据类型允许用户存储地理位置信息并执行地理半径查询、邻近点搜索等操作。 BitMap类型用于用户在线状态跟踪、访问统计例如用户是否读过某篇文章。 HyperLog类型:日活用户统计、网站独立访客统计、广告点击去重等需要估算大量唯一元素数量而不需精确存储所有元素的场景。 2.2、通用命令 通用命令常见的有 KEYS查看符合模板的所有key不建议在生产环境上使用 DEL删除一个指定的key EXISTS判断一个key是否存在 EXPIRE为一个key设置有效期有效期到了key会自动删除 TTL查看key的剩余有效期 2.3、不同数据结构的操作命令 String类型字符串类型包括普通字符串整数浮点数 API如下 SET添加或者修改string类型的键值对 GET根据key获取string类型的value MSET批量添加多个string类型的键值对 MGET根据string类型的key获取多个string类型的值 INCR让整型的key自增1 INCREBY整数设置步长的自增 INCREBYFLOAT按照指定步长的浮点型自增 SETNX添加一个string类型的键值对前提是key不存在否则不执行 SETEX添加一个string类型的键值对并指定有效期 redis的key允许有多个单词形成层级结构多个单词用“:”隔开如果value是一个Java对象则可以将对象序列化成JSON字符串后存储 例如key可以为  项目名:业务名:类型:id      value为{“id”:1,product:小米手机,price:2999} 这样redis会根据冒号进行层级划分。 Hash类型也称为散列value是一个无序字典类似于Java中的HashMap结构。之前的string类型的value是将对象序列化成JSON字符串后存储当需要修改某个字段时很不方便。 Hash结构可以将每个字段独立存储可以针对每个字段进行操作。 相关的API HSET key field value添加或者修改hash类型的key的field值 HGET key field获取一个hash类型的key的field值 HMSET批量添加多个hash类型key的field值 HMGET批量查询多个hash类型key的field值 HGETALL获取一个hash类型key的所有feild的值 HKEYS获取一个hash类型的key中的所有feild HVALS获取一个hash类型的key中的所有value HINCREBY让hash类型的key自增并指定步长 HSETNX添加一个hash类型的field前提是field不存在否则不执行 List类型List类型与Java中的LinkedList类似可以看作是一个双向链表支持正向与反向检索。 特征:有序、允许元素重复、插入删除快、查询速度一般 List的常见命令如下 LPUSH key element...向列表左侧插入一个或者多个元素 LPOP key 移除并返回列表左侧额第一个元素没有则返回nil RPUSH key element...:向列表右侧插入一个或者多个元素 RPOP key移除并返回列表右侧的第一个元素 LRANGE key  start end:返回一段角标范围内的所有元素 BLPOP与BRPOP移除指定的元素没有元素时并设置等待时间而不是直接返回nil List模拟栈lpush与lpop  rpush与rpop List模拟队列lpush与rpop List模拟阻塞队列blpop与brpop Set类型Redis中的set与Java中的HashSet类似具有如下特征无序、元素不可重复、查找快 、支持交集、并集差集等操作。 SET类型的常见命令 SADD key member...:向set中添加一个或者多个元素 SREM key member...:向set中移除指定元素 SCARD key返回set中的元素个数 SISMEMBER key member判断一个元素是否在set中 SMEMBERS获取set中的所有元素 SINTER key1 key2求两个key的交集 SDIFF:求两个集合的差集 SUNION求两个集合的并集 SortedSet类型有序的集合每个元素都带有一个score属性可以根据score属性进行排序底层是一个跳表hash表的实现。跳跃表提供O(log N)级别的插入、删除和查找操作并按分数排序hash表用于快速查找成员的存在性。 跳表是通过随机函数维护平衡性的当我们在跳表中插入数据的时候我们通过选择同时将这个数据插入到部分索引层中如何选择索引层可以通过一个随机函数来决定这个节点插入到哪几级索引中比如随机生成了k那么就将这个索引加入到第一级到第k级索引中。 SortedSet具有以下特点: 1、可排序 2、元素不重复 3、查询速度快 常见的SortedSort的api如下默认是升序如果向降序前缀由Z改成ZREV 三、Redis的Java客户端 3.1、Jedis客户端 常见的Redis的Java客户端有Jedis、Lettuce、Redisson三种具体如下。 下面我们通过jedis客户端连接redis服务器并进行单元测试具体如下 1.首先添加三方依赖。 !--jedis客户端依赖--dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.7.0/version/dependency!-- junit测试依赖 --dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.7.0/versionscopetest/scope/dependency 2.编写单元测试模块jedis客户端连接redis服务器并进行crud基本操作最后释放连接。 import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import redis.clients.jedis.Jedis;import java.util.Map;/*** author nuist__NJUPT* ClassName JedisTest* description: jedis测试类* date 2024/03/02*/ public class JedisTest {private Jedis jedis ;BeforeEachvoid setUp(){// 1.建立连接jedis new Jedis(localhost, 6379) ;// 2.设置密码jedis.auth(123456) ;// 3.选择库jedis.select(0) ;}Testvoid testString(){// 存入数据String result jedis.set(name, mandy);System.out.println(result);// 获取数据String name jedis.get(name);System.out.println(name : name );}Testvoid testHash(){// 存值jedis.hset(user:1, name, jack) ;jedis.hset(user:1, age, 21) ;// 取值MapString, String stringStringMap jedis.hgetAll(user:1);System.out.println(stringStringMap);}AfterEachvoid tearDown(){if(jedis ! null){jedis.close();}}} jedis本身是线程不安全的而且频繁的创建与销毁jedis连接会有性能损耗因此推荐使用jedis连接池的方式代替直连的方式。 1.定义一个连接池工具类用于建立jedis连接并返回jedis对象jedis使用完放回连接池而不是直接销毁。 import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;/*** author nuist__NJUPT* ClassName JedisConnectionFactory* description: Jedis连接池* date 2024/03/02*/ public class JedisConnectionFactory {private static final JedisPool jedisPool ;static {// 配置连接池JedisPoolConfig jedisPoolConfig new JedisPoolConfig();jedisPoolConfig.setMaxTotal(8);jedisPoolConfig.setMaxIdle(8);jedisPoolConfig.setMinIdle(0);jedisPoolConfig.setMaxWaitMillis(1000);// 创建连接池对象jedisPool new JedisPool(jedisPoolConfig, localhost, 6379, 1000, 123456);}public static Jedis getJedis(){return jedisPool.getResource() ;}} 2.客户端直接通过连接池获取jedis对象就可以不用直接newjedis对象进行直连了。 import com.alibaba.jedis.util.JedisConnectionFactory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import redis.clients.jedis.Jedis;import java.util.Map;/*** author nuist__NJUPT* ClassName JedisTest* description: jedis测试类* date 2024/03/02*/ public class JedisTest {private Jedis jedis ;BeforeEachvoid setUp(){// 1.建立连接// jedis new Jedis(localhost, 6379) ;jedis JedisConnectionFactory.getJedis() ;// 2.设置密码jedis.auth(123456) ;// 3.选择库jedis.select(0) ;}Testvoid testString(){// 存入数据String result jedis.set(name, mandy);System.out.println(result);// 获取数据String name jedis.get(name);System.out.println(name : name );}Testvoid testHash(){// 存值jedis.hset(user:1, name, jack) ;jedis.hset(user:1, age, 21) ;// 取值MapString, String stringStringMap jedis.hgetAll(user:1);System.out.println(stringStringMap);}AfterEachvoid tearDown(){if(jedis ! null){jedis.close();}}} 3.2、SpringDataRedis客户端 SpringData是Spring中数据操作的模块包含了对多种数据库的集成其中对redis的集成就是SpringDataRedis。它提供了对不同redis客户端的整合(jedis、Lettuce),提供了RedisTemplate统一API来操作Redis支持redis的发布订阅模型支持redis哨兵和redis集群支持基于Lettuce的响应式编程支持序列化与反序列化。 下面看一下SpringDataRedis提供的工具类RedisTemplate的应用首先创建springboot项目并导入redis依赖。 !-- jackson依赖 --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.5/version/dependency!--redis依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- 连接池依赖 --dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency 然后在yml文件中进行配值配值redis的数据源信息。 spring:redis:host: 127.0.0.1port: 6379password: 123456lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100 编写redisTemplate的配值类防止在redis在接收Object类型时把Object对象序列化成字节形式变成一串乱码可读性差占用内存。 /*** author nuist__NJUPT* ClassName RedisConfig* description: redis配置类* date 2024/03/02*/import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer;Configuration public class RedisConfig {/*** RedisTemplate可以接收任意Object作为值写入Redis* 只不过写入前会把Object序列化为字节形式默认是采用JDK序列化得到的一串很长的值* 缺点可读性查、浪费存储空间*/Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory redisConnectionFactory){// 1.创建 redisTemplateRedisTemplateString, Object redisTemplate new RedisTemplate();// 2.设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 3.设置序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();// key 采用 String 序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// value 采用 json 序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);return redisTemplate;} }定义一个实体类。 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;/*** author nuist__NJUPT* ClassName User* description: 实体类* date 2024/03/02*/Data NoArgsConstructor AllArgsConstructor public class User {private String name ;private Integer age ;} 最后编写单元测试模块利用redisTemplate进行测试。 import com.alibaba.redisdemo.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate;SpringBootTest class RedisDemoApplicationTests {Autowiredprivate RedisTemplateString, Object redisTemplate;Testvoid testString(){// 添加一个元素redisTemplate.opsForValue().set(name, Jack);// 获取元素Object object redisTemplate.opsForValue().get(name);System.out.println(object);}Testvoid testSaveUser(){//写入数据redisTemplate.opsForValue().set(user:2, new User(wang, 18));// 读取数据User user (User) redisTemplate.opsForValue().get(user:2);System.out.println(user);}Testvoid testHash(){stringRedisTemplate.opsForHash().put(user:3,name, liu);stringRedisTemplate.opsForHash().put(user:3,age,18) ;MapObject, Object entries stringRedisTemplate.opsForHash().entries(user:3);System.out.println(entries entries);}} 上述尽管Json序列化的方式满足要求但是会发现仍然存在一些问题比如JSON序列化器将类型class写入了json中存入redis会导致额外的内存开销。 为了节省内存空间不使用JSON序列化来处理value而是处理String序列化器要求只能存储String类型的key与value当存储Java对象的时候需要手动的序列化与反序列化。 可以采用如下写法   Autowiredprivate StringRedisTemplate stringRedisTemplate ;private static final ObjectMapper mapper new ObjectMapper() ;Testvoid testSave() throws JsonProcessingException {// 创建对象User user new User(wang, 18);// 手动序列化String s mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set(user:2,s);// 读取数据String user1 stringRedisTemplate.opsForValue().get(user:2);// s手动反序列化User user2 mapper.readValue(user1, User.class);System.out.println(user2);}使用fastJson进行序列化与反序列化也可以需要添加依赖。 Autowiredprivate StringRedisTemplate stringRedisTemplate ;Testvoid testSave() throws JsonProcessingException {// 创建对象User user new User(wang, 19);// 手动序列化String s JSON.toJSONString(user) ;//写入数据stringRedisTemplate.opsForValue().set(user:2,s);// 读取数据String user1 stringRedisTemplate.opsForValue().get(user:2);// s手动反序列化User user2 JSON.parseObject(user1, User.class) ;System.out.println(user2);}添加fastJson依赖。 !-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -- dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.32/version /dependency总结redis中有两种序列化方式推荐使用第二种。 1.第一种是自定义RedisTemplate修改其序列化器相对方便但是写入redis会存class对象占用额外的内存空间。 2.使用StringRedisTemplate默认使用String序列化器写入redis需要将Java对象手动序列化为json读取redis需要将读取到的json反序列化为Java对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

劝娃妈和娃不要学老人坐姿有感:老人无奈才坐成那样的。。AI协助分析很到位

因为娃和娃妈吃饭时抬腿,我就告诉他们不要去老人家坐,他们是身体结构和能量发生变化才那样做的,既不美观又不健康。。随后有了下述问题: 老人坐姿,跟年轻时比较会有什么区别? AI分析、回答的都不错: 年龄增长会…

从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式 - 实践

从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式 - 实践2025-09-27 17:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; ove…

使用JOL查看对象布局

[main] INFO com.crazymakercircle.threadpool.SeqOrScheduledTargetThreadPoolLazyHolder - 线程池已经初始化 [InnerLockTest.showNoLockObject]:# Running 64-bit HotSpot VM. # Using compressed oop with 3-bit …

集训队互测投题——封印

《封印》解题报告 题目大意 你是一名大魔法师,现在遇到了 \(n\) 只怪物,第 \(i\) 只怪物的出现时间为 \([l_i,r_i)\),有经验值 \(w_i\)。对于怪物 \(i\),你可以选择一个实数 \(k_i\in[l_i,r_i]\),并在 \([l_i,k_i…

短视频流量|基于SprinBoot+vue的短视频流量数据分析系统(源码+数据库+文档) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

河北省住房和城乡建设厅网站首页建公司网站

本文介绍基于Python语言,基于Excel表格文件内某一列的数据,计算这一列数据在每一个指定数量的行的范围内(例如每一个4行的范围内)的区间最大值的方法。 已知我们现有一个.csv格式的Excel表格文件,其中有一列数据&#…

一天一款实用的AI工具,第4期,AI翻译成英语

专业的英语翻译工具,帮你翻译成流畅的英文,助你提升翻译的质量。现实问题 传统机器翻译字面直译,译文生硬不自然,翻得干巴巴没味道,用户几乎无法干预翻译过程或风格。 工具介绍 本期介绍这款【AI翻译成英语工具】…

Docker基础与工程部署

Docker基础与工程部署pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

安装MariaDB服务器流程介绍在Ubuntu 22.04系统

更新系统包列表 首先,打开终端并运行以下命令来更新Ubuntu的包列表: sudo apt update 这将确保你安装的是最新版本的软件包。 安装MariaDB服务器 接下来,使用下面的命令安装MariaDB服务器: sudo apt install maria…

关于征求网站建设什么是品牌

查看全部教程开发请点击:全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中) ==================================================================== 版权归作者所有,未经允许,请勿转载。 ==========================================

初次尝试在kubernetes 1.31 上安装 人工智能模型运行平台 llm-d - 详解

初次尝试在kubernetes 1.31 上安装 人工智能模型运行平台 llm-d - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

三种神器让LLM输出结构化数据:LangChain、LlamaIndex与Function Calling实战指南

💡 引言:为什么结构化输出如此重要? 在构建大语言模型应用时,你是否遇到过这样的困扰:模型输出的数据格式混乱,难以直接使用?想象一下,当你需要从一段文本中提取用户信息时,模型却返回了自由散漫的文本段落—…

有什么好的加盟店项目该如何建设和优化一个网站

无线透传技术与其他数据传输技术(如有线连接)相比,具有以下优势和劣势: 1. 优势: 简单易用:无线透传模块由于直接进行数据透传,省去了许多数据处理和协议转换的步骤,使得数据传输更为快速和高效。   传输…

野指针

野指针Posted on 2025-09-27 17:10 steve.z 阅读(0) 评论(0) 收藏 举报野指针(Wild Pointer)是指向未知或无效内存地址的指针,是C/C++编程中常见的一种错误类型。 野指针的几种情况: 1. 未初始化的指针 int *…

win11安装ensp

安装包 1. eNSP+V100R003C00SPC100+Setup:https://www.alipan.com/s/mWWEg4rpsnj(严格) 2.VirtualBox-5.2.44-139111-Win:https://www.alipan.com/s/qJZBMJs3U9H(严格) 3.Wireshark-4.4.5-x64:https://www.alip…

自己湿热内蕴出汗痒和岳母生病2天不洗澡发痒的不同-完美解释小孩为啥没那么容易痒

先解释小孩为啥没那么容易痒,是因为他的身体比较平衡、既没有我的"湿热内蕴”, 也没有岳母的 "年老卫气渐虚",所以既没看到过他出汗后抓痒,也没看到、听到他说有两天没洗澡就身上发痒-虽然他自己常…

无刷电机驱动工程及PID算法FOC算法完成(超高质量超高质量

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

vue: ubuntu安装vue环境

一,官网: https://nodejs.org/en/download 二,安装: # Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash # in lieu of restarting the shell \. "…

golang实现ai聊天窗口

在Go语言中实现AI聊天窗口需要结合前端界面、后端服务以及AI模型调用。以下是一个分步实现的详细方案,包含关键代码示例和架构设计: 一、整体架构设计前端:使用HTML/CSS/JavaScript构建Web界面,通过WebSocket与后端…