Redis:redis基础

Redis

Remote Dictionary Service即远程字典服务

一个基于内存的key-value结构数据库,在开发中常常作为缓存存储不经常被改变的数据

基于内存存储,读写性能高

在企业中应用广泛

Redis介绍

用C语言开发的开源高性能键值对数据库,可以达到10w+的qps,可以存储丰富的value类型,被称为结构化的nosql数据库

Nosql:(Not Only Sql),泛指非关系型数据库(数据和数据之间没有联系)

是关系型数据库的补充

关系型数据库(RDBMS)

Mysql

Oracle

DB2

SQLServer

非关系型数据库(NoSql)

Redis

Mongo db

MemCached

Redis的作用

数据缓存:将数据缓存到redis中

消息队列

Redis的启动

前端模式启动(不使用)

直接运行bin/redis-server,缺点是启动完成后不能再进行任何操作除非使用ctrl+c退出

后端模式(推荐)

先修改redis.conf配置文件,修改daemonize 为yes

daemonize:后台运行

在启动时指定配置文件运行

./redis-server redis.conf
redis启动客户端
./redis-cli

Redis的终止

在redis客户端中输入
shutdown

Windows中Redis的启动和终止(仅了解)

直接打开redis-server.exe启动redis服务

默认端口号为6379

ctrl+c停止服务

打开redis-cli.exe启动redis客户端,默认连接本地Redis服务,且不需要认证即可连接成功

使用可视化工具连接redis服务器端

redis-desktop-manager

安装过程略,端口号默认6379

如果需要允许其他机器进行访问需要配置redis.conf进行内容配置

添加当前linux局域网的ip地址

切换redis数据库
select 数据库索引

注:一个redis服务器中可以包含多个数据库,客户端可以只连接Redis中的某个数据库

Redis中有db0-db15的16个数据库,不能被删除也不能新建,数据库中没有表结构,客户端默认连接第0个数据库

Redis的数据类型

redis的value支持五种数据类型

key必须为String类型,用以表示存储的数据

命名规则:

不能太长避免查询效率低

不能太短避免重复

value支持五种数据类型,表示存储的数据

string:字符串

hash:键值对

list:列表类型,存取有序,可以重复

set:集合类型,存取无需,不可重复

sorted set/zset :有序集合类型,每个元素有一个分数用以决定顺序

string类型

Redis中最基础的数据类型

字符串,整数,浮点类型都以字符串写入

最多容纳512m

常用命令
set 键 值
//添加或修改一个键值对
get 键
//根据键获取值,不存在返回nil(c语言中的null)
del 键
//删除指定键值对,返回删除个数
SETEX key seconds value 
//设置指定key的值,将key的过期时间设为seconds秒,
//即SET key value ex seconds
EXPIRE key seconds
//如果一个key存在,设置过期时间
SETNX key value/set key value nx
//保存键值对,如果key存在则不保存

mset name lisi addr sh
批量添加name为lisi addr为sh
mget name age addr
批量获取name,age,addr的值
del name age
批量删除name age

hash类型操作命令

Redis中的hash类型可以看成键值均为String类型的Map容器

每个Hash中可以保存2^32-1个键值对

常用命令
hset 键 字段 值
//添加键,字段,值
hget 键 字段
//通过键,字段得到值
hmset 键 字段 值 字段 值
//multiply多个,一次添加多个字段和值
hmget 键 字段 字段
//通过键,获取多个字段和值
hdel 键 字段 字段
//删除一个或多个字段的值
hgetall 键
//得到这个键下所有的字段和值
HKEYS 键
//获取哈希表中所有字段
HVALS 键
//获取哈希表中所有值

list类型

在Redis中list类型时按照插入顺序排序的字符串链表,可以在左侧和右侧添加新元素

如果该键不存在就会创建这个键对应的链表

如果键对应的链表没有元素就会将键也移除

list可以包含的元素为2^32-1个

常用命令
lpush 键 元素 元素
//从左边向指定的键中添加一个或多个元素,返回元素个数
rpush 键 元素 元素
//从右边向指定的键中添加一个或多个元素,返回元素个数
l/rpop 键
//从左/右侧删除一个元素,返回被删除的元素
lrange 键 开始 结束
//得到键中指定范围的元素的数据
从左到右的索引为0-n
从右到左的索引为-1-(-(n+1))
所以从左到最后一个即为0--1
lindex 键 索引值
//查询指定索引的元素
llen 键
//获取列表的长度
BRPOP key1 [key2] timeout
//移出并获取列表的最后一个元素,如果列表没有元素就会阻塞队列直到有元素或超时
LREM key 删除元素个数 value值
//从表头删除指定个数的元素

Set类型

没有排序的字符集合,不可重复

可包含的最大元素数量为2^32-1个

常用命令
sadd 键 元素 元素
//向一个键中添加一个或多个元素
smemers 键
//得到这个集合中所有的元素
sismember 键 元素
//判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素
//通过键删除一个或者多个元素
sinter key1 [key2]
//返回给定所有集合的交集(集合中共有的部分)

Zset/sorted set类型

sorted set有序集合

和set集合类似,但每个元素会关联一个分数作为排序因子

通过分数进行从小到大的排序

集合成员唯一但分数可以重复

常用命令
zadd 键 分数 值 分数 值
//添加一个或多个元素,每个元素都有一个分数
zincrby key increment member
//对指定元素的分数进行增减操作
zrange 键 开始索引 结束索引
//获取指定范围的元素,得到所有元素,索引为0到-1
zrange 键 开始索引 结束索引 withscores
//查询指定元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores
//按照分数倒序获取指定的元素和对应的分数
zrem 键 值 值
//删除一个或者多个值
zcard 键
//得到元素个数
zrank 键 值
//得到元素的索引号
zscore 键 值
//得到元素的分数

Redis通用命令

keys 匹配字符
//查询所有的键,可以使用通配符
//*匹配多个字符
//?匹配一个字符
del 键1 键2
//删除任何的值类型且可以同时删除多个键
exists键
//判断键是否存在,不存在返回0,存在返回1
type键
//判断指定键的值类型,返回类型名字
select数据库编号
//选择其他数据库
move键数据库编号
//将当前数据库中指定的键移动到另一个数据库中
TTL key
//返回给定key的剩余生存时间(TTL,time to live),以秒为单位
从Redis2.8开始
key不存在或已过期:-2
key存在或者没有设置过期时间:-1
flushall
//清空redis所有库(不推荐)

Java中操作Redis

Redis的java客户端

jedis

lettuce

redisson

Jedis

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.0</version>
</dependency>
Jedis类的常用方法

方法名即为redis中的命令名

方法参数即为命令参数

每次访问Redis数据库时都需要创建一个jedis对象

请添加图片描述

Spring Data Redis

Spring的一部分,在Spring应用中通过简单的配置即可访问Redis服务,高度封装了Redis底层开发包

@Autowired
private RedisTemplate<String,String> redisTemplate;
//注入redisTemplate

@Autowired
private StringRedisTemplate stringRedisTemplate
//redisTemplate的子类,避免写泛型

ValueOperations<String,String> vop = redisTemplate.opsForValue();
//根据redisTemplate获取操作String类型数据的对象
可以使用stringRedisTemplate

Redis持久化机制

服务端关闭会使数据部分丢失

因为redis服务器默认每隔一段时间才会写入一次内存数据到硬盘上

redis的持久化

因为redis的数据在ram上存储,所以断电就会丢失

所以需要保存到硬盘上做持久化操作

支持两种持久化方式:

RDB(快照)方式(默认)

将数据以快照方式写入二进制文件

默认文件名为dump.rdb

可以通过配置进行自动快照持久化

需要设置两个条件

时间和修改键数,当两个条件都满足时就会触发快照

优点:

持久化效率高

数据库宕机后数据恢复效率更高

缺点:

仍然可能出现数据丢失,如果在持久化之前出现宕机,就会丢失数据

AOF的存储方式

将每一个收到的写命令通过write函数追加到文件中

重启时会全部执行来进行重建

有三种同步策略

每秒同步
每次同步
不同步
优点:

AOF包含一个格式清晰,易于理解的日志文件用于记录所有修改操作,数据安全性更高,所有操作异步完成

缺点:

运行效率慢

文件更大

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)

错误情况 包名、类名显示红色、红色波浪线&#xff0c;大量依赖提示不存在&#xff08;程序包xxx不存在&#xff09; 工程无法启动 一、前提条件 1、使用英文原版IDEA 汉化版的可能有各种奇怪的问题。建议用IDEA英文版&#xff0c;卸载重装。 2、下载maven&#xff0c;配置环…

评测 香橙派OrangePi在智能交通上的应用

1、OrangePi应用场景 关于 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板&#xff0c;其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算&#…

12-常用类

1. 包装类 针对八种基本数据类型封装的相应的引用类型。 有了类的特点&#xff0c;就可以调用类中的方法。&#xff08;为什么要封装&#xff09; 基本数据类型包装类booleanBooleanchar CharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble 1.1 …

seRsync + Rsync 实时同步

1&#xff0c;结构图 2&#xff0c;节点A 2.1 安装rsync yum install -y rsync2.2 安装seRsync 下载这个压缩包sersync2.5.4_64bit_binary_stable_final.tar.gz 解压后&#xff0c;将sersync2复制到系统可执行程序路径&#xff1a;/usr/local/bin/&#xff1b;创建sersync配…

Visual Studio 的使用

目录 1. 引言 2. 安装和配置 2.1 系统要求 2.2 安装步骤 2.3 初次配置 3. 界面介绍 3.1 菜单栏和工具栏 3.2 解决方案资源管理器 3.3 编辑器窗口 3.4 输出窗口 3.5 错误列表 3.6 属性窗口 4. 项目管理 4.1 创建新项目 4.2 导入现有项目 4.3 项目属性配置 5. 代…

SpringSecurity6从入门到实战之SpringSecurity快速入门

SpringSecurity6从入门到实战之SpringSecurity快速入门 环境准备 依赖版本号springsecurity6.0.8springboot3.0.12JDK17 这里尽量与我依赖一致,免得在学习过程中出现位置的bug等 创建工程 这里直接选择springboot初始化快速搭建工程,导入对应的jdk17进行创建 直接勾选一个web…

QtCreator调试运行工程报错,无法找到相关库的的解决方案

最新在使用国产化平台做qt应用开发时&#xff0c;总是遇到qtcreator内调试运行 找不到动态库的问题&#xff0c;为什么会出现这种问题呢&#xff1f;明明编译的时候能够正常通过&#xff0c;运行或者调试的时候找不到相关的库呢&#xff1f;先说结论&#xff0c;排除库本身的问…

计算机网络7——网络安全1 概述与加密

文章目录 一、网络安全问题概述1、计算机网络面临的安全性威胁2、安全的计算机网络3、数据加密模型 二、两类密码体制1、对称密钥密码体制2、公钥密码体制 随着计算机网络的发展&#xff0c;网络中的安全问题也日趋严重。当网络的用户来自社会各个阶层与部门时&#xff0c;大量…

Raven2掠夺者2渡鸦2账号怎么验证 注册怎么验证账号教程

《渡鸦2》作为韩国孕育的次世代MMORPG手游巨制&#xff0c;是《Raven》系列辉煌传奇的最新篇章&#xff0c;它在暗黑奇幻的广袤天地间再度挥洒创意&#xff0c;深度融合前所未有的游戏机制与海量新颖内容&#xff0c;为该类型游戏树立了崭新的里程碑。公测日期锁定在2024年5月2…

2024 在Pycharm管理数据库

2024 在Pycharm管理数据库 Pycharm 社区版DataBase Navigator 数据库管理插件(Plugins)安装使用(sqlite为例添加数据) 文章目录 2024 在Pycharm管理数据库一、Pycharm数据库配置1、Database Navigator插件安装2、连接数据库 二、数据库使用1、插件自带基本操作2、控制台操作 …

LAMP集群分布式实验报告

前景&#xff1a; 1.技术成熟度和稳定性&#xff1a; LAMP架构&#xff08;Linux、Apache、MySQL、PHP&#xff09;自1998年提出以来&#xff0c;经过长时间的发展和完善&#xff0c;已经成为非常成熟和稳定的Web开发平台。其中&#xff0c;Linux操作系统因其高度的灵活性和稳…

恢复视频3个攻略:从不同情况下的恢复方法到实践!

随着科技的进步&#xff0c;我们的生活被各种各样的数字内容所包围&#xff0c;其中&#xff0c;视频因其独特的记录性质&#xff0c;承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍&#xff0c;都会遇到误删视频的情况。为了帮助您找回手机视频&#xff0…

2024全新升级版家政服务小程序源码 支持家政预约+上门服务+SAAS系统+可二开

随着科技的飞速发展&#xff0c;家政服务行业也迎来了数字化转型的浪潮。为了满足市场日益增长的需求&#xff0c;分享一款2024全新升级版的家政服务小程序源码。该源码不仅支持家政预约和上门服务&#xff0c;还集成了SAAS系统&#xff0c;并支持二次开发&#xff0c;为用户带…

【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。

一个简单的经典CNN网络结构由&#xff1a;输入层、卷积层、池化层、全连接层和输出层&#xff0c;这五种神经网络层结构组成。它最最经典的实例是LeNet-5&#xff0c;它最早被设计用于手写数字识别任务&#xff0c;包含两个卷积层、两个池化层、几个全连接层&#xff0c;以及最…

企业级OV SSL证书的应用场景和加密手段

为了保护数据传输的安全性与用户隐私&#xff0c;企业级OVSSL&#xff08;Organization Validation SSL&#xff09;证书成为众多企业的首选安全解决方案。本文将深入探讨OVSSL证书的应用场景及其实现数据加密的核心手段&#xff0c;为企业构建坚不可摧的在线信任桥梁提供指南。…

【面试干货】约瑟夫问题

【面试干货】约瑟夫问题 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 约瑟夫问题 是一个经典的数学问题&#xff0c;描述如下&#xff1a;编号为1, 2, …, n的n个人按顺时针方向围坐一圈&#xff0c;从第1个人开始…

实战教程:使用Go的net/http/fcgi包打造高性能Web应用

实战教程&#xff1a;使用Go的net/http/fcgi包打造高性能Web应用 简介理解FCGI协议FastCGI工作原理CGI与FastCGI对比其他接口对比 初步使用net/http/fcgi包设置和配置基础环境一个简单的FastCGI应用示例本地测试与调试 深入net/http/fcgi包的高级用法探索net/http/fcgi的主要功…

《最新出炉》系列入门篇-Python+Playwright自动化测试-46-鼠标滚轮操作

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 有些网站为了节省流量和资源&#xff0c;提高加载效率&#xff0c;采用的是动态加载&#xff08;懒加载&#xff09;的&#xff0c;也就是当拖动页面右侧滚动条后会自动加载网…

go语言方法之方法声明

从我们的理解来讲&#xff0c;一个对象其实也就是一个简单的赋值或者一个变量&#xff0c;在这个对象中会包含一些方法&#xff0c;而一个方法则是一个一个和特殊类型关联的函数。一个面向对象的程序会用方法来表达其属性和对应的操作&#xff0c;这样使用这个对象的用户就不需…

云计算-Lambda事件 (Lambda Events)

检索事件信息 (Retrieving Event Information) 在上一个主题中&#xff0c;我们已经看到了如何创建一个Lambda函数、添加handler、添加触发器和配置执行策略。在本主题中&#xff0c;我们将对其进行扩展。到目前为止&#xff0c;我们看到的handler应用非常简单&#xff0c;但我…