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

缺点:

运行效率慢

文件更大

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

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

相关文章

【ubuntu20】--- 定时同步文件

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux命令】--- 多核压缩命令大全&…

肉类食品解冻污水处理设备功能特点

诸城市鑫淼环保小编带大家了解一下肉类食品解冻污水处理设备功能特点 肉类食品解冻污水处理设备是专门用于处理肉类加工过程中产生的解冻废水的设备。这些设备在保障肉类食品生产过程中的卫生安全同时&#xff0c;也有效处理了废水&#xff0c;避免了环境污染。以下是对肉类食品…

VM虚拟机共享文件夹fuse: bad mount point `/mnt/hgfs‘: No such file or directory

报错显示挂载点 /mnt/hgfs 不存在&#xff0c;你需要先创建这个目录。可以按照以下步骤进行操作&#xff1a; 创建挂载点目录&#xff1a; sudo mkdir -p /mnt/hgfs 手动挂载共享文件夹&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 确保每次启动时自动…

液氮罐内部会污染吗

液氮罐是一种常见的存储液态氮的设备&#xff0c;广泛应用于科研、生物医药、食品冷冻等领域。但是&#xff0c;人们对于液氮罐内部是否会产生污染一直存在疑问。 我们来看液氮罐内部可能的污染源。液氮罐内部主要存在以下几种潜在的污染来源&#xff1a;气体污染、杂质污染、…

C++ | Leetcode C++题解之第117题填充每个节点的下一个右侧节点指针II

题目&#xff1a; 题解&#xff1a; class Solution { public:void handle(Node* &last, Node* &p, Node* &nextStart) {if (last) {last->next p;} if (!nextStart) {nextStart p;}last p;}Node* connect(Node* root) {if (!root) {return nullptr;}Node *…

推券客CMS淘宝优惠券网站源码

推券客CMS淘宝优惠券网站源码是一个以PHPMySQL进行开发的PHP淘宝客优惠券网站。支持电脑站、手机站以及微信公众号查券。支持多级代理返利和阿里妈妈最新的渠道管理等功能。 五大优势 一、全开源 推券客cms网站程序数据库完全开源,目前市场上基本都是以下2种淘宝客系统 第一…

LeetCode - 双指针(Two Pointers) 算法集合 [对撞指针、快慢指针、滑动窗口、双链遍历]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139270999 双指针算法是一种常见且灵活的技巧&#xff0c;通过使用两个指针协同完成任务。这些指针可以指向不同的元素&#xff0c;具体应用取决于…

Java中的异常处理策略:编写健壮的软件

异常处理是Java编程中一个重要的方面&#xff0c;正确的异常处理策略可以使软件更加健壮和易于维护。本文将详细探讨Java中的异常处理机制&#xff0c;介绍常见的异常类&#xff0c;以及提供有效的异常处理技巧和最佳实践。 #### 1. Java异常类别 Java中的异常分为两大类&…

Clickhouse 字符串函数使用总结—— Clickhouse基础篇(七)

文章目录 判空非空判断字符串长度左补齐字符串右补齐字符串字符串转小写字符串转大写重复字符串拼接字符串函数计算子串base64编码base64解码判断开头字符串判断结尾字符串删除空白字符从HTML提取纯文本字符串部分替换字符串全部替换字符串正则部分替换字符串正则全部替换计算子…

Spring Boot 与 OpenJ9 的 Docker 集成:提升 Java 应用性能的新选择

## 引言 随着 Docker 的普及&#xff0c;越来越多的开发者开始使用 Docker 来部署和管理他们的应用。在这种趋势下&#xff0c;将 Spring Boot 与 OpenJ9 结合使用&#xff0c;可以为 Java 应用带来更高的性能和更低的资源占用。本文将介绍如何在 Docker 环境中使用 Spring Bo…

回顾封装、继承和多态的概念,并给出相关示例

封装、继承和多态是面向对象编程&#xff08;OOP&#xff09;的三个核心概念。下面我将分别解释这些概念&#xff0c;并给出相应的示例。 封装 概念&#xff1a;封装是将数据&#xff08;变量&#xff09;和操作数据的方法&#xff08;函数&#xff09;组合到一个类中&#x…

pytest断言与Selenium模拟操作的规划案例

pytest断言与Selenium模拟操作的规划案例 在使用pytest进行自动化测试时&#xff0c;断言是验证测试结果是否符合预期的关键步骤。pytest提供了简洁的断言语法&#xff0c;使得编写测试用例更加直观和易于维护。以下是一个简单的规划案例&#xff0c;展示了如何在pytest中使用…

202309青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 用枚举算法求解“100 以内既能被 3 整除又能被 4 整除的元素”时, 在下列数值范围内,算法执行效率最高的是? ( ) A :1~101 B :4~100 C :12~100 D :12~96 正确答案:D 试题解析: 在选取循环控制变量时, 枚举范围应尽可能小, 但又不能遗漏。 第 …

掌握Python循环:从基础到应用的完整指南

循环语句是编程中常用的一种结构&#xff0c;用于重复执行特定的代码块。Python3 提供了几种类型的循环语句&#xff0c;包括for循环和while循环。接下来&#xff0c;我会详细解释循环语句的基本语法、常用命令、示例、应用场景、注意事项和总结。 基本语法 for 循环 for 变…

什么是勒索软件

什么是勒索软件 勒索软件又称勒索病毒&#xff0c;是一种特殊的恶意软件&#xff0c;又被归类为“阻断访问式攻击”&#xff08;denial-of-access attack&#xff09;&#xff0c;与其他病毒最大的不同在于攻击手法以及中毒方式。勒索软件的攻击方式是将受害者的电脑锁起来或者…

mysql-增量备份流程详细流程

3.增量备份流程 原理&#xff1a;每次备份上一次备份到现在产生的新数据 1.在数据库上面创建一个测试的库 增量备份流程&#xff08;重要) 增量备份跟上一次相比 我增加了啥--incremental //放到何处 --incremental-basedir //上一级//第一次增量备份 innobackupex --user…

Spring Boot中如何查询PGSQL分表后的数据

数据库用的pgsql&#xff0c;在表数据超过100w条的时候执行定时任务进行了分表&#xff0c;分表后表名命名为原的表名后面拼接时间&#xff0c;如原表名是card_device_trajectory_info&#xff0c;分表后拼接时间后得到card_device_trajectory_info_20240503&#xff0c;然后分…

ubuntu使用oh my zsh美化终端

ubuntu使用oh my zsh美化终端 文章目录 ubuntu使用oh my zsh美化终端1. 安装zsh和oh my zsh2. 修改zsh主题3. 安装zsh插件4. 将.bashrc移植到.zshrcReference 1. 安装zsh和oh my zsh 首先安装zsh sudo apt install zsh然后查看本地有哪些shell可以使用 cat /etc/shells 将默…

使用nexus搭建的nodejs私库,定期清理无用的npm组件,彻底释放磁盘空间

一、背景 昨天我们整理了一篇关于docker私库&#xff0c;如何定期清理以释放磁盘空间的文章。 虽然也提及了npm前端应用的组件该如何定期清理的&#xff0c;本文是对它作一个补充说明。 前文也看到了&#xff0c;npm组件占用的blob空间为180多GB&#xff0c;急需清理。 二、…

Flutter 中的 MouseRegion 小部件:全面指南

Flutter 中的 MouseRegion 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;MouseRegion 是一个非常有用的小部件&#xff0c;它允许你为部件添加鼠标事件&#xff08;如点击、悬停、离开等&#xff09;。这在开发需要处理鼠标交互的应用时尤为重要。本文将详细介绍 Mou…