05-Redis初步使用

news2024/11/13 12:33:27

关系型数据的ACID特性:事务的四大特性:原子性,一致性,隔离性,持久性

关系型数据库应对的三高问题:高并发,高效率,高扩展

关系型数据库和非关系型数据库

关系型数据库的数据存储在表中,无法应对陡增的数据

非关系型数据库使用键值对的方式进行存储数据:redis可以用作缓存

redis概述

直接操作内存中的数据

优势:

​ 开源的,分布式,水平可扩展的

​ 对数据高并发读写

​ 单线程操作

缺点:

​ 事务处理非常简单

​ 不能做复杂的关系数据库模型

各种命令及使用场景

使用命令**“redis-cli”**进入redis服务器

​ redis的类型和map相似

常见的五大类型:String ,hash,list,set,zset

各种返回结果的表示什么

nil和java中的null一样

1 操作成功

0 操作失败

-1 示永久存在

-2 表示已经超时

其他时间 表示存活的时间

String类型

应用场景

​ 1.计数器

​ 2.共享session,对某个用户的身份进行校验

命令格式功能案例
set key value将key-value缓存redis中set name dafei
get key从redis中获取key对应value值get name
incr key将key对应value值 + 1,只能事先将字段设置为数值incr age
decr key将key对应value值-1decr age
setex key seconds value将key-value缓存到redis中,seconds 秒后失效setex sex 10 man
ttl key查看key存活时间ttl sex
del key从redis中删除keydel name
setnx key value如果key已经存,不做任何操作,如果key不存,直接添加setnx name xiaofei

incr value 只能对数值进行增加

hash类型

应用场景

​ 1.存储对象,登录用户信息

类似map中的map

在这里插入图片描述

命令格式功能案例
hset key field value将field value对缓存到redis中hash中,键值为keyhset user name dafei
hget key field从key对应hash列表中获取field字段hget user name
hexists key field判断key对应的hash列表是否存在 field字段hexists user age
hdel key field删除key对应hash列表中field字段hdel user age
hincrby key field increment给key对应hash列表中field字段 + incrementhincrby user age 10
hlen key查看key对应的hash列表field的数量hlen user
hkeys key获取key对应的hash列表所有的field值hkeys user
hvals key获取key对应的hash列表所有的field对应的value值hvals user
hgetall key获取key对应的hash列表中所有的field及其对应的value值hgetall user
list类型

结构就像双向链表,操作头尾的数据,允许重复

使用场景

​ 用户收藏列表

命令格式功能案例
rpush key value从右边往key集合中添加value值rpush hobby java
lrange key start stop从左边开始列表key集合,从start位置开始,stop位置结束,0 -1表示取所有lrange hobby 0 -1
lpush key value从左边往key集合中添加value值lpush hobby c++
lpop key弹出key集合中最左边的数据lpop hobby
rpop key弹出key集合中最右边的数据rpop hobby
llen key获取列表长度llen hooby
set类型

无序的,不允许重复

使用场景

​ 1.去重

​ 2.抽奖功能

命令格式功能案例
sadd key members向key集合中添加member元素sadd myset a b c
smembers keyL列出key集合中的所有元素smembers myset
srem key member删除key集合中的某一个元素srem myset b
spop key count从key集合中随机弹出count个集合spop myset 2
Sorted set(zset)类型

应用场景

​ 具有排序的功能:将排名的名字作为score

命令格式功能示例
zadd key score member向key集合中添加member元素,分数为scorezadd play 10 a
zincrby key count member向key集合中的member元素 数值增加countzincrby play 100 a
zrange key start stop withscore列出开始到结束范围的元素,升序排列显示分数zrange play 0 -1 withscore
zrevrange key start stop withscore列出开始到结束范围的元素,降序排列显示分数zrevrange play 0 -1 withscore
zrank key member返回元素\正序排名的位置zrank play b
zrevrank key member返回元素倒叙排名的位置zrevrank play b
zcard key返回集合中元素的个数zcard play

各个类型的使用场景

1.用来存储对象还是字符串

​ 对象使用hash,字符串使用list,set,string zset

2.是否有序,可重复

​ 有序可重复使用list,无序不可重复使用set,zset

3.是否进行排序

​ 不需要排序使用set,需要排序使用zset

value设计

需要排序的就使用zset,

剩下的就使用string,java操作方便,减少泛型的操作,将所有的value都转化为json

key设计

保证唯一性(将id写在名字中)

user_token:1:{ }

可读性(做到见名知意,一般使用:进行分割)

employee_info:id1

灵活性

时效性

​ key一定要设置过期时间,否则数量多了容易造成宕机

redis全局命令

命令格式功能示例
keys *列出所有的keykeys *
exists key判断这个key是否存在exists name
expire key time给key设置存活时间expire user 20
persist key取消存活时间presist user

redis安全性

给redis加密码

修改密码后需要重启服务

若出现服务不能连接的情况就可能是没有启动服务器

在Java中使用redis

1.使用jedis

​ ①添加jedis配置文件application.yaml

​ ②在java实体类中使用@ConfigurationProperties(prefix = “jedis.pool”)加载配置文件

​ ③需要编写jedis配置类,添加@Configuration注解,获取连接池

​ ④使用的方式,需要关闭资源

在这里插入图片描述

2.使用lettuce

​ 使用的方法很简单

①导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-Redis</artifactId>
</dependency>

②配置redis

spring:
  Redis:
    host: 127.0.0.1
    port: 6379
    password: admin

③使用方式

在这里插入图片描述

// 操作string
//template.opsForValue().xx();
// 操作hash
//template.opsForHash().xx();
// 操作list
//template.opsForList().xx();
// 操作set
//template.opsForSet().xx();
// 操作zset
//template.opsForZSet().xx();


//spring-data-Redis  方法是Redis 命令全称
//template.opsForList().rightPush()  //rpush

//全局命令在template类上
//template.keys("*");

事务执行的三个阶段

事务开始到执行经历的三个阶段

​ 1.开始事务,使用multi开始

​ 2.命令入队

​ 3.执行事务,使用exec执行

将多条命名存起来,再统一执行

不会关心是否全部成功或者全部失败,即使中间有一条命令执行错误后面的命令也会继续执行

即redis的事务是不具有原子性的

redis持久化操作

为什么重启服务后,会出现有的数据会丢失,有的不会丢失

​ 原因:redis会不定时将数据持久化到磁盘中

redis的3种持久化方式:

1.快照方式(RDB),

​ 将数据转成二进制文件持久化到磁盘中

触发方式

​ 手动触发:save命令,数据多了容易阻塞, ;bgsave命令,redis使用fork创建子进程实现RDB持久化

​ 自动触发:使用命令 save m n ,在m秒内有n次操作就会自动触发bgsave命令

优点:

​ 1.紧凑压缩的二进制文件,用于文件备份,全量复制场景

​ 2.redis使用RDB恢复数据的方式远远快于AOF

**缺点:**数据会丢失,不能做到数据秒级持久化,版本不同有兼容问题

2.文件追加方式(AOF)

​ 追加是命令,将命令写到文件中去,能做到持久化的实时性

redis默认不开启,在配置文件中进行开启, appendonly yes

优点:

​ 1.数据安全性高

​ 2.不下心使用了删除命令后可以进行数据的恢复

​ 3.AOF太大的时候后台会自动重写AOF

​ 4.AOF日志的存在不用担心设备断电的情况

缺点:

​ AOF的体积比RDB更大

​ AOF持久化的速度比RDB更慢

3.RDB和AOF混合使用

AOF

**缺点:**数据会丢失,不能做到数据秒级持久化,版本不同有兼容问题

2.文件追加方式(AOF)

​ 追加是命令,将命令写到文件中去,能做到持久化的实时性

redis默认不开启,在配置文件中进行开启, appendonly yes

优点:

​ 1.数据安全性高

​ 2.不下心使用了删除命令后可以进行数据的恢复

​ 3.AOF太大的时候后台会自动重写AOF

​ 4.AOF日志的存在不用担心设备断电的情况

缺点:

​ AOF的体积比RDB更大

​ AOF持久化的速度比RDB更慢

3.RDB和AOF混合使用

结合了两者的优点,现将当前数据一RDB的形式写在文件开头,后续的操作使用AOF的格式存入文件

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

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

相关文章

U-Boot移植 - 3_U-Boot 命令使用

文章目录 U-Boot 命令使用1. 信息查询命令2. 环境变量操作命令2.1 修改环境变量2.2 新建环境变量2.3 删除环境变量 3. 内存操作命令3.1 md 命令3.2 nm 命令3.3 mm 命令3.4 mw 命令3.5 cp 命令3.6 cmp 命令 4. 网络操作命令4.1 ping 命令4.2 dhcp 命令4.3 nfs 命令4.4 tftp 命令…

Pinia基础使用 (vite vue3)

Pinia 概念 是 Vue 的存储库&#xff0c;它允许您跨组件/页面共享状态。 Vue官方推荐状态库 Pinia 的优点 pinia 符合直觉&#xff0c;易于学习。 pinia 是轻量级状态管理工具&#xff0c;大小只有1KB. pinia 模块化设计&#xff0c;方便拆分。 pinia 没有 mutations&#x…

Linux多进程数据交换--共享内存

个人博客地址: https://cxx001.gitee.io 基础 在linux系统开发当中&#xff0c;时常需要在多个进程之间交换数据&#xff0c;在多个进程之间交换数据&#xff0c;有很多方法&#xff0c;但最高效的方法莫过于共享内存。 linux共享内存是通过tmpfs这个文件系统来实现的&#x…

【漏洞案例】记一次aws-key泄露导致火币交易所被攻击案例

全球最大的加密货币交易所之一火币悄然修复了一个数据泄露事件&#xff0c;该泄露事件可能导致该公司的云存储被访问。火币无意中共享了一组凭证&#xff0c;授予其所有 Amazon Web Services S3 存储桶写入权限。 该公司使用 S3 存储桶来托管其 CDN 和网站。任何人都可以使用这…

shell中sed命令常用用法总结

1、sed命令匹配文本内容进行替换 #-i 可以直接在原始文本中匹配替换&#xff0c;s/匹配内容/需要替换的内容/g &#xff0c;g是以一行为全局&#xff0c;有g说明每行中匹配到的都需要替换&#xff0c;没有g说明&#xff0c;只需要替换每行中的第一个匹配到的。 sed -i s/pool …

前端 鱼骨图 elenemt ui

展示图 代码 <template><div><divclass"fishbone":style"{ height: calc((${topChiderH} ${topChiderH}) 33px) }"><div class"top-box"><divclass"flex-items"ref"topChilderen":style"…

使用预训练CNN生成图像嵌入(image embeddings)

文章目录 什么是图像嵌入&#xff1f;来自 Kaggle 的狗品种图像数据集从狗品种图像数据集生成图像嵌入参考 什么是图像嵌入&#xff1f; 图像嵌入是图像的低维表示。换句话说&#xff0c;它是图像的密集向量表示&#xff0c;可用于分类等许多任务。 例如&#xff0c;这些深度…

(0020) H5-Vue-router+Element-ui 搭建非常简单的dashboard

参考学习&#xff1a; Vue Vue-router Element-ui 搭建一个非常简单的dashboard demo demo参考&#xff1a;https://github.com/wangduanduan/vue-el-dashboard 在线预览 效果图&#xff1a; 使用到的技术&#xff1a; Vue Vue-router Element-ui webpack Normalize.css v…

final关键字 抽象类

final关键字 可以修饰类、属性、方法和局部变量【参数】。 使用场景 1、当不希望 类被继承时&#xff0c;可以用final修饰。比如不希望子类重写父类时。 2、当不希望子类重写父类的某个方法。注意&#xff1a;此时不能重写但能继承父类此方法使用。 3、当不希望类的某个属…

windows下在注册表中添加右键pycharm打开目录

1、winregedit打开注册表&#xff0c;并在shell下创建项&#xff0c;修改如下图右侧内容 2、在PyCharm下创建command项&#xff0c;并修改其内容 3、重启电脑 4、显示

比ping还好用的排障命令

遇到网络故障的时候&#xff0c;你一般会最先使用哪条命令进行排障&#xff1f; 除了Ping&#xff0c;还有Traceroute、Show、Telnet又或是Clear、Debug等等。 今天安排的&#xff0c;是Traceroute排障命令详解&#xff0c;给你分享2个经典排障案例哈。 01 Traceroute原理和功…

Cisco ISR 4000 Series IOS XE Release Dublin-17.11.1a ED

Cisco ISR 4000 Series IOS XE Release Dublin-17.11.1a ED 思科 4000 系列集成服务路由器 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-isr-4000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 思科 4000 系列…

Matlab无人机算法开发套件上新,快速实现控制算法到无人机平台的移植

在现有的旋翼无人机市场中&#xff0c;绝大部分可二次开发的产品都只提供C、C等SDK&#xff0c;但在科研类无人机这一细分领域中&#xff0c;更多的开发者偏好或善于使用Matlab进行算法的开发和验证。为了助力从事控制算法理论研究的开发者&#xff0c;能够独立完成控制算法到无…

举例说明什么是循环神经网络

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种处理时间序列数据和自然语言等具有顺序信息的数据的神经网络模型。与普通的前馈神经网络&#xff08;Feedforward Neural Network&#xff09;不同&#xff0c;RNN具有循环连接&#xff0c;使得网络能…

【Java】-【IDEA 编译项目时报错:GC overhead limit exceeded】

文章目录 问题简述问题分析解决方案解决方案一解决方案二 问题简述 以前项目启动都是好好的&#xff0c;没有任何问题&#xff0c;最近启动时却报错&#xff1a; java.lang.OutOfMemoryError: ...(此处忽略) GC overhead limit exceeded问题分析 错误是发生在编译阶段&#…

STM32单片机CAN总线汽车灯光控制系统远近光刹车双闪

实践制作DIY- GC0151---CAN总线汽车灯光控制系统 基于STM32单片机设计---CAN总线汽车灯光控制系统 二、功能介绍&#xff1a; OLED主控板&#xff1a;STM32F103C系列最小系统OLED显示3个按键&#xff08;大灯开关、大灯自动/手动、大灯近光/远光&#xff09;左转按键右转按键双…

docker学习(七)docker daemon

1.Docker 的CS模式 1.1.Docker 的C/S模式介绍 在 Docker Client 中来运行 Docker 的各种命令&#xff0c;这些命令会传送给在 Docker 的宿主机上运行的 Docker 守护进程。而 Docker 守护进程是负责实现 Docker 各种功能的。 如图所示&#xff0c;Docker 守护进程运行在宿主机…

超参数调试、Batch正则化和程序框架

1、归一化网络的激活函数&#xff08;Normalizing activations in a network &#xff09; 规范化&#xff0c;方法如下&#xff0c;减去均值再除以标准偏差&#xff0c;为了使数值稳定&#xff0c; 通常将&#x1d700;作为分母&#xff0c;以防&#x1d70e; 0的情况 &…

使用maven profile 实现一次打包多版本依赖的fat jar

基于一种特殊情况: 需要开发通用代码,但底层依赖的jar有不同版本,使用一次maven 命令编译来同时生成多个fat jar。 测试代码结构: log4j-v1/log4j-v2 有一个同名类被maintest引用。 maintest pom.xml如下 <?xml version="1.0" encoding="UTF-8"…

Docker的安装以及Docker私有仓库的搭建

Docker的安装 # 1、yum 包更新到最新 yum update # 2、安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 设置yum源 yum-config-manage…