四十三、Redis基础

目录

一、认识NoSql

1、定义:

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义: 

2、特征:

3、Key的结构:

三、安装Redis

四、Redis常见命令

1、数据结构介绍

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

(2)DEL:删除一个指定的key

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

(1)HSET key field value:添加或者修改hash类型key的field的值

(2)HGET key field:获取一个hash类型key的field的值

(3)HMSET:批量添加多个hash类型key的field的值

(4)HMGET:批量获取多个hash类型key的field的值

(5)HGETALL:获取一个hash类型的key中的所有的field和value

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

5、List类型的命令

​(1)LPUSH key  element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key  element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

​(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set中

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1与key2的交集

(7)SDIFF key1 key2 ... :求key1与key2的差集

(8)SUNION key1 key2 ... :求key1与key2的并集

7、SortedSet类型的命令

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score值

(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTER、ZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖

(2)建立连接,编写yml文件

(3)测试

2、jedis连接池

3、SpringDataRedis

(1)定义

(2)实现

4、RedisTemplate

5、StringRedisTemplate


一、认识NoSql

1、定义:

NoSQL是指非关系型数据库,在这种数据库中,数据没有被组织成关系表,而是以一种更灵活的方式存储。NoSQL数据库通常不需要预定义模式以及支持水平扩展能力,这使得它们能够处理大规模和分布式数据。

NoSQL数据库可分为4类:键值存储、文档存储、列存储和图形数据库。

  1. 键值存储:通过在每个键上存储对应的值,实现简单的数据将数据以键值对的形式保存,例如Redis、Memcached等。

  2. 文档存储:文档数据存储在类似JSON的无模式格式中。文档存储在MongoDB、Couchbase等数据库中。

  3. 列存储:数据存储在列簇中,而不是行中,适合存储结构化和半结构化数据。例如HBase。

  4. 图形数据库:图形数据库是一种结构化数据存储方式,用于处理图形或半结构化数据。例如Neo4j、OrientDB等。

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义: 

Redis是一个开源的,基于内存的键值对存储数据库,可以用作缓存、消息队列、计数器等。

2、特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

3、Key的结构:

三、安装Redis

安装指南icon-default.png?t=N7T8https://blog.csdn.net/icbbm/article/details/134895407?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134895407%22%2C%22source%22%3A%22icbbm%22%7D

四、Redis常见命令

1、数据结构介绍

        在官网( https://redis.io/commands )可以查看到不同的命令

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

以“a”开头

(2)DEL:删除一个指定的key

先批量创建键,再做批量删除,此时因为k4不存在,所以只删掉3个

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

KEY

VALUE

field

value

heima:user:1

name

Jack

age

21

heima:user:2

name

Rose

age

18

(1)HSET key field value:添加或者修改hash类型keyfield的值

(2)HGET key field:获取一个hash类型keyfield的值

(3)HMSET:批量添加多个hash类型keyfield的值

(4)HMGET:批量获取多个hash类型keyfield的值

(5)HGETALL:获取一个hash类型的key中的所有的fieldvalue

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的keyfield值,前提是这个field不存在,否则不执行

  

5、List类型的命令

(1)LPUSH key  element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key  element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOPRPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1key2的交集

(7)SDIFF key1 key2 ... :求key1key2的差集

(8)SUNION key1 key2 ... :求key1key2的并集

7、SortedSet类型的命令

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score
(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTERZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖
        <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.0</version></dependency>
(2)建立连接,编写yml文件
spring:redis:host: 192.168.248.152port: 6379password: 1234lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100ms
(3)测试
    @Testvoid testSaveUser() {// 写入数据redisTemplate.opsForValue().set("user:100", new User("哥", 21));// 获取数据User o = (User) redisTemplate.opsForValue().get("user:100");System.out.println("o = " + o);}

2、jedis连接池

3、SpringDataRedis

(1)定义

SpringDataSpring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:Spring Data Redis

  • 提供了对不同Redis客户端的整合(LettuceJedis
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDKJSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于RedisJDKCollection实现

API

返回值类型

说明

redisTemplate.opsForValue()

ValueOperations

操作String类型数据

redisTemplate.opsForHash()

HashOperations

操作Hash类型数据

redisTemplate.opsForList()

ListOperations

操作List类型数据

redisTemplate.opsForSet()

SetOperations

操作Set类型数据

redisTemplate.opsForZSet()

ZSetOperations

操作SortedSet类型数据

redisTemplate

通用的命令

(2)实现

1.引入依赖

        <!--redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
        <!--common-pool--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

2.配置yml文件

spring:redis:host: 192.168.248.152port: 6379password: 1234lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100ms

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.测试

    @Testvoid testString() {// 写入一条String数据redisTemplate.opsForValue().set("name", "虎哥");// 获取string数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name = " + name);}

4、RedisTemplate

缺点:

  • 可读性差
  • 内存占用较大

自定义RedisTemplate的序列化方式代码:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){// 创建RedisTemplate对象RedisTemplate<String, Object> template = new RedisTemplate<>();// 设置连接工厂template.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置Key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// 设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);// 返回return template;}
}

5、StringRedisTemplate

手动序列化:

    @Testvoid testSaveUser() throws JsonProcessingException {// 创建对象User user = new User("虎哥", 21);// 手动序列化String json = mapper.writeValueAsString(user);// 写入数据stringRedisTemplate.opsForValue().set("user:200", json);// 获取数据String jsonUser = stringRedisTemplate.opsForValue().get("user:200");// 手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user1 = " + user1);}

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

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

相关文章

Mysql dumpling 导入导出sql文件

一&#xff1a;导出命令 mysqldump -u root -p saishi > saishi.sql mysqldump -u root -p saishi > saishi.sql root是用户名 saishi是数据库名 saishi.sql导出文件名 二&#xff1a;选择导入的数据库 cd到安装mysql的文件下&#xff08;找不到可以用&#xff1a;wh…

IP地址SSL证书申请指南

1&#xff0c;选择 与基于域名的SSL证书类似&#xff0c;IP地址SSL证书也分为多种类型&#xff0c;包括DV和OV 等。DV证书只需验证域名的所有权&#xff0c;适合个人和小型企业&#xff1b;OV证书除了验证域名所有权外&#xff0c;还需要验证申请单位的真实身份信息&#xff0…

代码随想录算法训练营第48天| 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

JAVA代码编写 198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给…

Python从入门到精通

一、Python基础语法 1、字面量 掌握字面量的含义了解常见的字面量类型基于print语句完成各类字面量的输出 什么是字面量&#xff1f; 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量 常用的值类型 Python中常用的有6种值&#xff…

AI联盟!甲骨文、英特尔、Meta等57家组织参与

全球社交、科技巨头Meta在官网宣布&#xff0c;与甲骨文、英特尔、AMD、IBM、索尼、戴尔等57家科技、学术研究机构组成——AI联盟。 在这57家组织中很多是大模型开源领域的领导者&#xff0c;例如&#xff0c;类ChatGPT模型的开源鼻祖Meta&#xff1b; 文生图领域最知名开源平…

pytorch与cuda环境安装操作

Pytorch 安装 11.8 Windows版本的 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 在cmd或者power shell中运行 ![需要python环境] 安装完成后可以使用以下命令检测cuda是否安装好 nvidia-smi Thu Dec 7 19:51:03 2023 ----…

外贸自建站是什么意思?做海洋建站的好处?

外贸自建站什么意思&#xff1f;跨境电商自建站的好处有哪些&#xff1f; 外贸自建站是指外贸企业或个人通过建站的方式&#xff0c;搭建自己的电子商务网站&#xff0c;用于开展海外贸易和拓展国际市场。海洋建站将详细介绍外贸自建站&#xff0c;帮助您更好地理解并开展外贸…

Git篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、git pull 和 git fetch 有什么区别?二、git中的“staging area”或“index”是什么?三、什么是 git stash?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

Linux常用命令——zip命令

文章目录 1. 简介2. 基本语法3. 常用选项4. 使用实例实例 1: 压缩单个文件实例 2: 压缩多个文件实例 3: 递归压缩目录实例 4: 创建密码保护的压缩文件 5. 结论 1. 简介 zip 是一个在Linux系统中广泛使用的压缩工具。它可以用来创建压缩文件&#xff08;通常是.zip格式&#xf…

泡沫包装市场分析:预计2029年将达到659亿元

泡沫包装&#xff0c;简单地讲&#xff0c;就是用数学方法对无线电测量或光学测量所获得的弹道数据进行检验、整理、校正、计算&#xff0c;减小或消除数据的误差&#xff0c;得出反映运载火箭运动轨迹的精确弹道参数。通常所说的泡沫包装&#xff0c;主要是指由可发性聚苯乙烯…

Modelscope Agent初体验与思考

背景&#xff1a;LLM → \to → Agent ChatGPT为代表的大语言模型就不用过多的介绍了&#xff0c;ChatGPT很强大&#xff0c;但是也有做不到的东西。 例如&#xff1a; 实时查询问题&#xff1a;实时的天气&#xff0c;地理位置&#xff0c;最新新闻报道&#xff0c;现实世…

100:ReconFusion: 3D Reconstruction with Diffusion Priors

简介 官网 少样本重建必然导致nerf失败&#xff0c;论文提出使用diffusion模型来解决这一问题。从上图不难看出&#xff0c;论文一步步提升视角数量&#xff0c;逐步与Zip-NeRF对比。 实现流程 Diffusion Model for Novel View Synthesis 给定一组输入图像 x o b s { x i…