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

云安区学校网站建设统计表培训课程表

云安区学校网站建设统计表,培训课程表,做外贸需要做个英文网站吗,迪奥官网网站做的好吗一、redis命令 1.redis通用命令 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令 常见的命令有: keys 查看符合模板的所有key,不建议在生产环境设备上使用,因为keys会模式匹配所有符合条件的key&#…

一、redis命令

1.redis通用命令

Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令
常见的命令有:

keys

查看符合模板的所有key,不建议在生产环境设备上使用,因为keys会模式匹配所有符合条件的key,而redis是一个单线程的数据库,这样会导致很多其它操作阻塞。如果redis是集群分布的,则可以在重库中进行匹配,保证主库中的业务不被阻塞。
例如 keys *,(心号是通配符,还有另外两种通配符?和 [],具体功能自行查看。
在这里插入图片描述

del

删除一个指定的key。
比如现在库中有三个name,我们要删除name3,del name3,返回值为1,说明删除成功。
在这里插入图片描述
在这里插入图片描述

exists

判断key是否存在。
刚才在上面我们删除了name3,现在我们来判断它是否存在,exists name3,返回0,说明不存在
在这里插入图片描述

expire

给一个已经存在的key设置有效期,单位为,有效期到期时会自动删除。
我们给name2设置5秒的有效期测试一下,返回1,设置成功,5秒后name2会被删除
在这里插入图片描述

ttl

查看一个key的剩余有效期。
刚才我们给name2设置有效期后,使用ttl查看name2的剩余有效期,返回2,说明还剩2秒。
使用ttl查看name1的有效期,返回-1,说明name1是永久有效。
使用ttl查看name3的有效期,返回-2,说明name2在内存中不存在。
在这里插入图片描述

help [command]

help [command]可以帮助我们在命令行中查看命令的书写格式以及命令的作用,如:
在这里插入图片描述
当然也可以在redis官网文档中查询redis文档

2.Redis中key的层级结构

redis中的key可以用 “:” 进行分隔,比如:
key = “nation:city:area”,value=“中国北京海淀区”
在这里插入图片描述

3.Redis中的数据结构

  • String
    String类型,也就是字符串类型,是Redis中最简单的存储类型。
    其value是字符串,不过根据字符串的格式不同,又可以分为3类:
    string: 普通字符串
    int: 整数类型,可以做自增、自减操作
    float: 浮点类型,可以做自增、自减操作
    不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m

  • hash
    在这里插入图片描述

  • list
    Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。(实际数据结构比较复杂,可以自行了解)
    特征也与LinkedList类似:
    ●有序
    ●元素可以重复
    ●插入和删除快
    ●查询速度一般,常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

  • set
    Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。 因为也是一个hash表, 因此具备与HashSet类似的特征:
    ●无序,set中的元素存放顺序和插入顺序不是一致的。
    ●元素不可重复
    ●查找快
    ●支持交集、并集、差集等功能

  • SortedSet
    Redis的SortedSet是- -个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList) 加hash表。
    SortedSet具备下列特性:
    ●可排序
    ●元素不重复
    ●查询速度快
    因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

二、redis客户端

redis常用客户端对比,SpringDataReids集成了jedis和lettuce
在这里插入图片描述

1.jedis

jedis是java和redis两个单词的简写,我们可以使用java代码操作jedis客户端对redis数据库进行操作。

导入包

  <dependencies><!--单元测试依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version><!--注释掉test作用域,让junit在全域有效-->
<!--<scope>test</scope>--></dependency><!--jedis依赖--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency></dependencies>

编写测试类

public class TestJedis {private Jedis jedis;//在每个单元测试前建立连接@BeforeEachvoid setUp(){//1.建立连接jedis = new Jedis("127.0.0.1",6379);// Jedis jedis = JedisConnectionFactory.getJedisFromPool();//2.设置密码
//        jedis.auth("");//3.选择库,默认为0jedis.select(0);}//在每个单元测试后关闭连接@AfterEachvoid tearDown(){if (jedis != null){jedis.close();}}//测试使用jedis访问redis@Testvoid testString(){jedis.set("name1","jack");String s = jedis.get("name1");System.out.println(s);}
}

jedis中操作redis的方法的方法名和reids原生的指令名称一致
执行testString就可以对redis数据库进行操作了

2.jedis连接池

上面创建jedis连接操作redis的方法有一个问题,如果存在大量的redis操作,我们就需要频繁的创建销毁jedis连接,这样会造成很大的性能消耗。
所以我们引入jedis连接池

创建jedis连接池工厂

/*** @author Watching* * @date 2023/3/31* * Describe:jedis连接池工厂类*/
public class JedisConnectionFactory {//创建一个静态常量jedispool引用,用于指向我们创建jedis连接池private static final JedisPool jedisPool;static {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//设置jedis连接池最大连接数量jedisPoolConfig.setMaxTotal(8);//设置jedis连接池最大空闲连接数量jedisPoolConfig.setMaxIdle(8);//设置jedis连接池最小空闲连接数量jedisPoolConfig.setMinIdle(0);//设置jedis连接池连接最长等待时间jedisPoolConfig.setMaxWaitMillis(200);jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, "root", "cdut2019");}//提供一个静态方法从jedis连接池中获取jedis连接public static Jedis getJedisFromPool() {return jedisPool.getResource();}
}

编写测试类

测试类和直接使用jedis连接的测试类基本相同,唯一不同的点是我们不需要通过new jedis(host,psssword)来获取连接,而是直接调用jedis连接池工厂中的静态方法。

/*** @author Watching* * @date 2023/3/30* * Describe:*/public class TestJedis {private Jedis jedis;//在每个单元测试前建立连接@BeforeEachvoid setUp(){//1.建立连接
//        jedis = new Jedis("127.0.0.1",6379);Jedis jedis = JedisConnectionFactory.getJedisFromPool();//2.设置密码
//        jedis.auth("");//3.选择库,默认为0jedis.select(0);}//在每个单元测试后关闭连接@AfterEachvoid tearDown(){if (jedis != null){jedis.close();}}//测试使用jedis访问redis@Testvoid testString(){jedis.set("name1","jack");String s = jedis.get("name1");System.out.println(s);}
}

3.SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。

  • 提供了对不同Redis客户端的整合( Lettuce和Jedis )
  • 提供了RedisTemplate统- -API来操作Redis
  • 支持Redis的发 布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响 应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现,JDK原生的Collection不支持分布式
    在这里插入图片描述

引入SpringDataRedis依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

编写redis配置

spring:redis:host: 127.0.0.1port: 6379password: cdut2019lettuce:pool:min-idle: 8max-wait: 1000msmax-active: 8max-idle: 8

测试

在springboot测试类中注入redistemplate进行测试
在这里插入图片描述

更改默认的客户端

SpringDataRedis默认使用的客户端时Lettuce,如果想要使用jedis可以通过修改依赖文件:

<!--整合redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><!--排除lettuce,使用jedis 避免堆外内存溢出异常--><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><!--引入jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>

4.redisTemplate的序列化

在上面的测试中我们发现存在redis中的key和value有点奇怪,这是redistemplate使用了默认的序列化器(JDKSerializer)
在这里插入图片描述
添加一个配置类,就可以解决这个问题

/*** @author Watching* * @date 2023/3/31* * Describe:redis配置类* 更改jdk默认序列化*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String,String> redisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<String,String> redisTemplate = new RedisTemplate<>();//key和hashKey都设置为String序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setKeySerializer(RedisSerializer.string());//value和hashValue都设置为JSON序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}
}

在运行测试类的时候报错

Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder

这是因为我们在使用GenericJackson2JsonRedisSerializer序列化,但是却没有引入jackson依赖,引入该依赖就行

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

这下子就正常了
在这里插入图片描述
我们再尝试插入一个对象试试,成功了。并且json数据中还多了一条@class数据,所以在get这个value的时候,GenericJackson2JsonRedisSerializer可以帮我们反序列化。但是,多出来的@class信息会占用多余的空间,所以我们建议还是使用手动序列化,和反序列化,比如使用JSONutil.parse**等
在这里插入图片描述

StringRedisTemplate

StringRedisTemplate默认使用String序列化器,可以更方便在Redis中存储字符串类型的数据,可以阅读源码来了解一下。

http://www.fp688.cn/news/160194.html

相关文章:

  • 郑州彩票网站开发百度信息流推广教程
  • 门户型网站都有哪些google关键词工具
  • 关于申请开通网站建设的请示可以发外链的网站整理
  • 长沙 网站开发网络营销的未来发展趋势论文
  • 学做网站什么语言合适seo排名优化方式
  • 做er图的网站网络营销渠道可分为哪些
  • 土地流转网站建设报告营销团队找产品合作
  • 网站建设相关知识输入关键词就能写文章的软件
  • 美国政府网站建设自己怎么给网站做优化排名
  • 德国 网站建设近期的新闻消息
  • 怎样让自己网站的文章被百度收录优化设计单元测试卷答案
  • 网站qq代码企业网站设计论文
  • 中国十大公关公司seo排名外包
  • 小说网站建设需要什么网络推广渠道分类
  • 做代购网站有哪些东西怎样做网络推广效果好
  • 服务网站建设排行自制网站 免费
  • 网站建设及第三方支付百度seo网站优化 网络服务
  • 哪个网站可以做电子档的邀请函关键词怎么优化
  • 番禺做网站百度热搜榜小说排名
  • 做网站的人能看到浏览的人的信息吗北京网站优化价格
  • 网络工作室照片推广优化网站
  • 网页设计音乐网站电商网站规划
  • 政府网站 两学一做网站优化教程
  • 怎样在网上建网站做电商生意如何在百度上建立网站
  • 5台电脑做视频网站服务器鞍山seo外包
  • g时代网站建设谷歌seo推广
  • 做接口自动化是网站登录加密百度推广怎么优化
  • 网站付费推广渠道二十条优化措施
  • 域名租用平台在线网站seo优化
  • 兴义市住房和城乡建设局网站班级优化大师手机版下载(免费)