四十三、Redis基础

news2024/11/29 0:50:56

目录

一、认识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.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms
(3)测试
    @Test
    void 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.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.测试

    @Test
    void 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 {

    @Bean
    public 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

手动序列化:

    @Test
    void 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.coloradmin.cn/o/1300102.html

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

相关文章

孜然地址引导页V9(带后台)

刚刚在浏览之前经常访问的网站的时候我发现他不用那个域名了&#xff0c;然后我见这个页面好看&#xff0c;就把他干下来了&#xff0c;然后把给他写了个后台。另外如果你的子页面收录多的话&#xff0c;人家百度访问你的子页面会显示404的&#xff0c;所以为了流量可观安装这个…

改进的A*算法的路径规划(1)

引言 近年来&#xff0c;随着智能时代的到来&#xff0c;路径规划技术飞快发展&#xff0c;已经形成了一套较为 成熟的理论体系。其经典规划算法包括 Dijkstra 算法、A*算法、D*算法、Field D* 算法等&#xff0c;然而传统的路径规划算法在复杂的场景的表现并不如人意&#xff…

项目二 创建与操作学生管理数据库

项目二 创建与操作学生管理数据库 #目标 创建库&#xff1b;查看库&#xff1b;操作库&#xff1b;图形工具操作库1&#xff0c;创建学生管理数据库 #创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

开发猿的平平淡淡周末---2023/12/10

天气阴 温度适宜17摄氏度 AM 昨晚竟然下小雨了&#xff0c;还好还好&#xff0c;昨天刷的两个背包基本干了 一觉睡到日三竿&#xff0c;谁是神仙&#xff0c;我是神仙&#xff08;哈哈哈哈哈哈&#xff09; 刷会儿视频 补充下起床的动力 洗漱&#xff0c;恰饭&#xff0c;肝…

springboot基础(80):redis geospatial的应用

文章目录 前言redis geospatial如何从地图上获取经纬度springboot 的相关方法调用准备redis服务器引用的依赖预设位置的keyGEOADD 添加位置GEORADIUS 获取指定经纬度附件的停车场&#xff08;deprecated&#xff09;GEORADIUS 获取指定成员附件的停车场&#xff08;deprecated&…

[LeetCode]-283. 移动零-1089. 复写零

目录 283. 移动零 描述 解析 代码 1089. 复写零 描述 解析 代码 283. 移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &…

【安卓12源码】WMS系列:addWindow 和 removeWindow流程

一、Window 的属性 Window的属性定义在WindowManager的内部类LayoutParams中&#xff0c;了解Window的属性能够更好的理解WMS的内部原理。Window的属性有很多种&#xff0c;与应用开发最密切的有三种&#xff0c;它们分别是Type(Window的类型)、Flag(Window的标志)和SoftInputM…

【蜗牛到家】获南明电子信息产业引导基金战略投资

智慧社区生活服务平台「蜗牛到家」已于近期获得贵阳南明电子信息产业引导基金、华科明德战略投资。 贵阳南明电子信息产业引导基金属于政府旗下产业引导基金&#xff0c;贵州华科明德基金管理有限公司擅长电子信息产业、高科技产业、城市建设及民生保障领域的投资&#xff0c;双…

【EI会议征稿中】第三届信号处理与通信安全国际学术会议(ICSPCS 2024)

第三届信号处理与通信安全国际学术会议&#xff08;ICSPCS 2024&#xff09; 2024 3rd International Conference on Signal Processing and Communication Security 信号处理和通信安全是现代信息技术应用的重要领域&#xff0c;近年来这两个领域的研究相互交叉促进&#xf…

[每周一更]-(第76期):Go源码阅读与分析的方式

读源码可以深层理解Go的编写方式&#xff0c;理解作者们的思维方式&#xff1b;也有助于对Go语法用法深刻的理解&#xff0c;我们从这一篇说一下如何读源码&#xff0c;从哪些源码着手&#xff0c;从 简单到深入的方式学习源码&#xff1b; 学习源码也是一个修炼过程&#xff0…

【小白专用】Sql Server 连接Mysql 更新23.12.09

目标 已知mysql连接参数&#xff08;地址和用户&#xff09;&#xff0c;期望通过Microsoft Sql Server Management Studio &#xff08;以下简称MSSSMS&#xff09;连接Mysql&#xff0c;在MSSSMS中直接查询或修改Mysql中的数据。 一般是选最新的版本下载。 选64位还是32位&a…

P13 Linux进程间通信——管道

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《链表_C…

LeetCode二分查找:寻找旋转排序数组中的最小值

LeetCode二分查找&#xff1a;寻找旋转排序数组中的最小值 题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋…

Nginx【通俗易懂】《上篇》

目录 1.什么是Nginx&#x1f495;&#x1f495;&#x1f495; 2.Nginx的基本目录&#x1f495;&#x1f495;&#x1f495; 3.基本原理图 &#x1f495;&#x1f495;&#x1f495; 4.Nginx配置 &#x1f495;&#x1f495;&#x1f495; 5.日志的分析 &#x1f495;&…

neuq-acm预备队训练week 8 P4779 【模板】单源最短路径(标准版)

题目背景 题目限制 题目描述 给定一个 n 个点&#xff0c;m 条有向边的带非负权图&#xff0c;请你计算从 s 出发&#xff0c;到每个点的距离。 数据保证你能从 s 出发到任意点。 输入格式 第一行为三个正整数n,m,s。 第二行起 m 行&#xff0c;每行三个非负整数 ui​,vi​…

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

JAVAEE-8-线程池

池 我们之前也接触过,比如说常量池,数据库连接池,线程池,进程池,内存池等等, 池的共性: 1.提前把要用的对象准备好 2.把用完的对象也不要立即释放,先留着以备下次使用 来提高效率!!! 最开始,进程能够解决并发编程的问题,因为频繁创建销毁进程的开销成本太大了,所以我们引…

接口自动化测试框架的搭建

经过了一年多的接口测试工作&#xff0c;旧的框架也做了一些新的调整&#xff0c;删除了很多冗余的功能&#xff0c;只保留了最基本的接口结构验证、接口回归测试、线上定时巡检功能。 框架的演进 1.界面 UI 做了优化&#xff0c;整个框架的画风突然不一样了&#xff08;人靠…

11、虚函数、多态、纯虚函数

11、虚函数、多态、纯虚函数 虚函数覆盖调用 多态实现多态的两个必要条件多态 和 this指针多态的实现&#xff1a;虚函数表虚函数表与动态绑定动态绑定动态绑定对性能的影响 纯虚函数抽象类纯抽象类 虚函数 形如class 类名{ virtual 返回值 函数名(形参表) { … } }; 的成员函…

Git merge 与 Git rebase 与 Git fetch

Git merge 与 Git rebase 看这个图就行了 git merge、git rebase 和 git fetch 是 Git 中的三个不同的命令&#xff0c;它们分别用于不同的目的。以下是它们的主要区别&#xff1a; git merge&#xff08;合并&#xff09;&#xff1a; 用途&#xff1a; 用于将一个分支的更改…