Redis【超详细】
Redis 是一个基于内存的key-value结构的数据库
一、redis的安装
1.1、安装步骤
1)安装Redis依赖
Redis是基于c语言编写的,因此需要安装对应的gcc环境
yum install -y gcc tcl
2)进入/usr/local/src/目录上传并解压安装包
解压:
tar -zxvf 安装包名
3)解压成功后进入解压的文件目录
运行编译指令:
make && make install
注意:如果没有报错,表示安装成功,默认安装路径为/user/lcoal/bin目录下
1.2、启动方式
1)前台启动
前台启动,会阻塞整个窗口,窗口关闭或者停止,Redis也会停止
redis-server
2)后台启动
修改Redis的配置文件,配置文件就在解压的安装包下,名称为redis.conf,修改配置文件,一般先进行备份
# 将守护进程修改为yes就可以在后台运行
daemonize yes
修改成功后启动redis时,只需要在命令后面加上配置文件名
redis-server redis.con
1.3、开机自启
通过配置设置开机自启,创建一个系统服务文件
1)创建系统服务文件:
vi /etc/systemd/system/redis.service
2)设置文件内容为:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
# 这行配置内容要根据redis的安装目录自定义路径
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3)重载系统服务:
systemctl daemon-reload
之后就可以使用systemctl命令操作redis
1.4、Redis其他配置
# 设置访问Redis的访问密码
requirepass 密码
# 监听端口
port 6379
# 设置允许访问的地址,默认是127.0.0.1,会导致只能在本地访问,设置为0.0.0.0就可以在任何IP下访问
bind 0.0.0.0
# 数据库数量,设置为1,代表只使用一个数据库,默认有16个库
databases 1
# 设置redis最大使用的内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日子文件名
logfile "文件名"
1.4、使用Docker安装
普通安装redis后,redis默认只能够本地连接(127.0.0.1),不能进行远程访问;
常规步骤:
-
安装redis镜像:拉取官方的最新版本的镜像
docker pull redis:latest -
查看redis镜像:查看是否已安装了 redis
docker images -
运行容器
docker run -itd --name myRedis -p 6379:6379 redis -
查看容器安装成功
docker ps
支持远程访问:
-
安装redis镜像:拉取官方的最新版本的镜像
docker pull redis:latest -
新建data和conf两个文件夹,位置随意
mkdir -p /root/docker/redis/data mkdir -p /root/docker/redis/conf -
增加配置文件 redis.conf
在刚才新建的redis/conf中新建文件redis.conf,内容如下:
#bind 127.0.0.1 //允许远程连接 protected-mode no appendonly yes //持久化 requirepass 123456 //密码
注意:
1、以上文件(redis.conf)内容行与行之间不能带有空格,否则新建容器后,容器状态为stopped,无法启动;
2、如果配置了redis密码,在配置时除了需要redis的ip端口号外,也需要配置redis密码;
-
创建redis容器并启动:
docker run --name myRedis -p 6379:6379 -v /root/docker/redis/data:/data -v /root/docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf -
启动成功,查看状态
docker ps
二、常用指令
2.1、常用数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有五种常用到的数据类型
-
String —— 字符串类型(最常用)
-
Hash —— 字典类型(最常用)
-
List —— 列表类型
-
Set —— 集合类型
-
ZSet —— 有序集合类型
2.2、字符串常用命令
字符串类型string:普通字符串,Redis中最简单的数据类型
| 指令 | 说明 |
|---|---|
| set key value | 设置指定key的值 |
| get key | 获取指定key的值 |
| setex key seconds value | 设置置顶key的值,并将key的过期时间设置为seconds秒 |
| setnx key value | 只有在key不存在时设置value的值 |
e g:
// 设置指定key所对应值
set name lihua
// 获取指定key的值
get name
// 设置指定key的有效时间为20秒
setex age 20 zhang
// 当设置的key不存在时才会设置对应的值,存在时不设置
setnx score 98 // 不存在时返回1,存在时返回0
2.3、哈希常用命令
哈希hash:也叫散列,类似于java中的HashMap结构,hash特别适合存储对象
| 指令 | 说明 |
|---|---|
| hset key field value | 将哈希表中的字段field的值设置为value |
| hget key field | 获取存储在哈希表中指定字段的值 |
| hdel key field | 删除存储在哈希表中指定字段的值 |
| hkeys key | 获取哈希表中的所有字段 |
| hvals key | 获取哈希表中所有值 |
e g:
// 设置ID属性为2的人的name属性为zhang
hset 2 name zhang
// 获取ID属性为2的问的name属性的值
hget 2 name
// 删除id属性为2的人的name属性的值
hdel 2 name
// 获取ID属性为2的人的所有字段
hkeys 2
// 获取ID属性为2的人的所有字段值
hvals 2
2.4、列表常用命令
列表list:按照插入顺序排序,可以有重复元素,类似java中的linkelist
| 指令 | 说明 |
|---|---|
| lpush key value1 [value2] | 将一个或多个值插入到列表的头部 |
| lrange key start stop | 获取列表指定范围内的元素 |
| rpop key | 移除并获取列表最后一个元素 |
| llen key | 获取类表的长度 |
eg:
// 向对应key中插如两个值
lpush mylist 23 43
// 获取对应key的指定范围内的元素(头部到尾部使用0 -1表示)
lrange mylist 0 -1
// 删除并获取列表中的最后一个
rpop mylist
// 获取指定列表的长度
llen mylist
2.5、集合常用命令
集合set:无序集合,没有重复元素,类似于java中的HashSet
| 指令 | 说明 |
|---|---|
| sadd key member1 [member2] | 向集合中添加一个或多个成员 |
| smembers key | 返回集合中的所有成员 |
| scard key | 获取集合的成员数 |
| sinter key1 [key2] | 返回所有指定集合的交集 |
| sunion key1 [key2] | 返回所有集合的并集 |
| srem key member1 [member2] | 删除集合中一个或多个成员 |
e g:
// 向集合中添加两个成员
sadd myset 223 344
// 返回集合中的所有元素
smembers myset
// 获取集合的成员数
scard myset
// 返回两个集合的交集
sinter myset1 myset2
// 返回两个集合的并集
sunion myset2 myset2
// 删除集合中的元素
srem myset 223
2.6、有序集合常用命令
有序集合sorted set |zset:集合中每个元素关联一个double类型的分数,根据分数生序排序,没有重复元素
| 指令 | 说明 |
|---|---|
| zadd key score1 member1 [score2 member2] | 向有序集合中体添加一个或多个成员 |
| zrange key start stop [withscores] | 通过索引区间返回有序集合中的指定区间的元素 |
| zincrby key increament member | 有序集合中对指定成员的分数加上增量increament |
| zrem key member [member] | 移除有序集合中的一个或者多个元素 |
eg:
// 向有序集合中添加一个成员并指定a的score值为10.0
zadd zset 10.0 a
// 查看有序集合中的所有成员的元素
zrange zset 0 -1
// 查看有序集合中的所有成员的元素和分数
zrange zset 0 -1 withscore
// 对有序成员中的a元素的分数值加5
zincrby zset 5.0 a
// 删除有序集合中的指定元素
zrem zset b
2.7、通用命令
Redis的通用命令就是部分数据类型的,都可以使用的命令
| 命令 | 说明 |
|---|---|
| keys pattem | 查找所有符合给定模式pattem的key |
| exists key | 检查给定的key是否存在 |
| type key | 返回key所存储的数据类型 |
| del key1 [key2] | 删除指定存在的key |
eg:
// 返回所有的key
keys *// 返回以set开头的所有key
keys set*
// 检查具体key是否存在
exists tex
// 返回对应key存储的数据类型
type tex
// 删除key
del tex
三、在java程序中操作redis
在java程序中一般使用Spring Data Redis操作redis数据库
3.1、redis的java客户端
Redis的java客户端有很多,常用的有几种:
-
Jedis
-
Lettuce
-
Spring Data Redis
Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装
3.2、Spring Data Redis的使用方法
操作步骤:
-
导入Spring Data Redis的maven坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
-
配置Redis数据源
redis:host: IP地址port: 端口号password: 密码database: 10 # 表示使用10号数据库,redis默认创建16个数据库
-
编写配置类,创建RedisTemplate对象
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/*** Redis配置类*/
@Configuration
@Slf4j
public class RedisConfiguration {
@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建Redis模版对象···");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的链接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化对象redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
-
通过RedisTemplate对象中的opsFor***来获取具体对象操作Redis,这里列举个别
/*** Redis测试类*/
@SpringBootTest
public class RedisTemplateText {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void textRedisType(){/*** 操作字符串类类型数据*/// 添加字符串类型数据-并设置有效时间redisTemplate.opsForValue().set("name","zhangshanc",20, TimeUnit.MILLISECONDS);// 对应key不存在时设置对应的key的值--对应redis中的setnx指令redisTemplate.opsForValue().setIfAbsent("age","12");
/*** 操作哈希类型数据--其他指令见名知意*/// 添加hash类型的数据使用put--对应redis中的指令为hsetredisTemplate.opsForHash().put("11","name","tom");}
}
注意:redis中通用类型的数据直接使用RedisTemplate对象直接操作
相关文章:
Redis【超详细】
Redis 是一个基于内存的key-value结构的数据库 一、redis的安装 1.1、安装步骤 1)安装Redis依赖 Redis是基于c语言编写的,因此需要安装对应的gcc环境 yum install -y gcc tcl 2)进入/usr/local/src/目录上传并解压安装包 解压…...
通过ip获取用户位置信息以及地区时间
项目需要获取用户得位置信息以及地区时间,因为第一次搞,以防还有下次,特此记录 1.首先就是显得拿到用户得ip地址 先上代码: public boolean checkIp(String ip) {return null ip || ip.isEmpty() || "unknown".equa…...
pytest-yaml-sanmu(七):使用fixture返回值
fixture 是 pytest 中非常重要的功能,大部分项目都可能会用到 fixture。 pytest 的内置标记 usefixtures 可以帮助用例自动的使用 fixture 1. 创建 fixture pytest 中的 fixtures 大致有两个用途 在用例执行之前、执行之后,自动的执行 通过 fixture …...
2024最全软件测试面试八股文(答案+文档+视频讲解)
Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…...
EasyBoss ERP移动端上线数据分析模块,随时查Shopee/TikTok本土店数据
前段时间,EasyBoss ERP出了个超酷炫的数字大屏功能,广受好评。 但是也有老板说,电脑端看数据不够方便啊,你们EasyBoss有本事上个手机就能看数据的功能啊! 说干就干,直接满足你们的需求! 于是在…...
机器学习与AI大数据的融合:开启智能新时代
在当今这个信息爆炸的时代,大数据和人工智能(AI)已经成为推动社会进步的强大引擎。作为AI核心技术之一的机器学习(Machine Learning, ML),与大数据的深度融合正引领着一场前所未有的科技革命,不…...
视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势
随着安防行业的快速进步,传统的视频监控平台正在与先进的技术和互联网技术融合,包括5G通信、GIS、大数据、云计算、边缘计算、AI识别、智能分析和视频直播等。这些技术的整合形成了综合性视频监控管理平台,具备集中管理、多级联网共享、互联互…...
Python面试宝典第6题:有效的括号
题目 给定一个只包括 (、)、{、}、[、] 这些字符的字符串,判断该字符串是否有效。有效字符串需要满足以下的条件。 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 3、每个右括号都有一个对应的相同类型的左括号。 注意:空字符…...
Windows上使用Navicat连接ubuntu上的mysql8报错:10061和1130
问题一:can’t connect to mysql server on ‘192.168.xxx.xxx’(10061) 解决: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,bind-address绑定了登陆的IP,把这两行代码注释掉,然后重启mysql。 问题二:1…...
Feign远程调用,请求头丢失情况
现象 解决方案 import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestContextHolde…...
Windows 11 安装 安卓子系统 (WSA)
How to Install Windows Subsystem for Android (WSA) on Windows 11 新手教程:如何安装Windows 11 安卓子系统 说明 Windows Subsystem for Android 或 WSA 是由 Hyper-V 提供支持的虚拟机,可在 Windows 11 操作系统上运行 Android 应用程序。虽然它需…...
CD4017 – 带解码输出的十进制计数器
CD4017 IC 是一个十进制计数器,它有 10 个输出,分别代表 0 到 9 的数字。计数器在(14号引脚)每个时钟脉冲上升时增加 1。计数器达到 9 后,它会在下一个时钟脉冲时从 0 重新开始。 引脚名称管脚 #类型描述VD…...
Spring Boot 文件上传和下载指南:从基础到进阶
文章目录 引言1. 环境配置2. 文件上传2.1 配置文件上传路径2.2 创建上传服务2.3 创建上传控制器 3. 文件下载3.1 创建下载服务3.2 创建下载控制器 4. 前端页面4.1 文件上传页面4.2 文件下载页面 5. 技术分析结论 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o …...
Windows Server 2019部署网络负载均衡NLB服务的详细操作步骤
部署前准备 首先需要准备两台Windows Server 2019服务器,虚拟机创建请参考 VMware Workstation安装Windows Server2019系统详细操作步骤_安装windows server 2019操作系统(写出操作过程)-CSDN博客 克隆虚拟机请参考 VMware Workstation克隆虚拟机详细步骤-CSDN博…...
Java增加线程后kafka仍然消费很慢
文章目录 一、问题分析二、控制kafka消费速度属性三、案例描述 一、问题分析 Java增加线程通常是为了提高程序的并发处理能力,但如果Kafka仍然消费很慢,可能的原因有: 网络延迟较大:如果网络延迟较大,即使开启了多线…...
分布式事务实现技术及考虑点
什么是分布式事务? 首先理解什么是本地事务 平时我们在程序中通过Spring去控制事务是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所…...
JavaScript中闭包的理解
闭包(Closure)概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域。简单来说;闭包内层函数引用外层函数的变量,如下图: 外层在使用一个函数包裹住闭包是对变量的保护,…...
传统IO和NIO文件拷贝过程
参考:https://blog.csdn.net/weixin_57323780/article/details/130250582...
算法思想总结:优先级队列
一、最后一块石头的重量 . - 力扣(LeetCode) 我们每次都要快速找到前两个最大的石头进行抵消,这个时候用优先级队列(建大堆),不断取堆顶元素是最好的!每次删除堆顶元素后,可以自动调整…...
《米小圈日记魔法》边看边学,轻松掌握写日记的魔法!
在当今充满数字化娱乐和信息快速变迁的时代,如何创新引导孩子们学习,特别是如何培养他们的写作能力,一直是家长和教育者们关注的焦点。今天就向大家推荐一部寓教于乐的动画片《米小圈日记魔法》,该系列动画通过其独特的故事情节和…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
