当前位置: 首页 > news >正文

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&#xff09;安装Redis依赖 Redis是基于c语言编写的&#xff0c;因此需要安装对应的gcc环境 yum install -y gcc tcl 2&#xff09;进入/usr/local/src/目录上传并解压安装包 解压&#xf…...

通过ip获取用户位置信息以及地区时间

项目需要获取用户得位置信息以及地区时间&#xff0c;因为第一次搞&#xff0c;以防还有下次&#xff0c;特此记录 1.首先就是显得拿到用户得ip地址 先上代码&#xff1a; public boolean checkIp(String ip) {return null ip || ip.isEmpty() || "unknown".equa…...

pytest-yaml-sanmu(七):使用fixture返回值

fixture 是 pytest 中非常重要的功能&#xff0c;大部分项目都可能会用到 fixture。 pytest 的内置标记 usefixtures 可以帮助用例自动的使用 fixture 1. 创建 fixture pytest 中的 fixtures 大致有两个用途 在用例执行之前、执行之后&#xff0c;自动的执行 通过 fixture …...

2024最全软件测试面试八股文(答案+文档+视频讲解)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…...

EasyBoss ERP移动端上线数据分析模块,随时查Shopee/TikTok本土店数据

前段时间&#xff0c;EasyBoss ERP出了个超酷炫的数字大屏功能&#xff0c;广受好评。 但是也有老板说&#xff0c;电脑端看数据不够方便啊&#xff0c;你们EasyBoss有本事上个手机就能看数据的功能啊&#xff01; 说干就干&#xff0c;直接满足你们的需求&#xff01; 于是在…...

机器学习与AI大数据的融合:开启智能新时代

在当今这个信息爆炸的时代&#xff0c;大数据和人工智能&#xff08;AI&#xff09;已经成为推动社会进步的强大引擎。作为AI核心技术之一的机器学习&#xff08;Machine Learning, ML&#xff09;&#xff0c;与大数据的深度融合正引领着一场前所未有的科技革命&#xff0c;不…...

视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势

随着安防行业的快速进步&#xff0c;传统的视频监控平台正在与先进的技术和互联网技术融合&#xff0c;包括5G通信、GIS、大数据、云计算、边缘计算、AI识别、智能分析和视频直播等。这些技术的整合形成了综合性视频监控管理平台&#xff0c;具备集中管理、多级联网共享、互联互…...

Python面试宝典第6题:有效的括号

题目 给定一个只包括 (、)、{、}、[、] 这些字符的字符串&#xff0c;判断该字符串是否有效。有效字符串需要满足以下的条件。 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 3、每个右括号都有一个对应的相同类型的左括号。 注意&#xff1a;空字符…...

Windows上使用Navicat连接ubuntu上的mysql8报错:10061和1130

问题一&#xff1a;can’t connect to mysql server on ‘192.168.xxx.xxx’(10061) 解决&#xff1a; sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf&#xff0c;bind-address绑定了登陆的IP&#xff0c;把这两行代码注释掉&#xff0c;然后重启mysql。 问题二&#xff1a;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 新手教程&#xff1a;如何安装Windows 11 安卓子系统 说明 Windows Subsystem for Android 或 WSA 是由 Hyper-V 提供支持的虚拟机&#xff0c;可在 Windows 11 操作系统上运行 Android 应用程序。虽然它需…...

CD4017 – 带解码输出的十进制计数器

CD4017 IC 是一个十进制计数器&#xff0c;它有 10 个输出&#xff0c;分别代表 0 到 9 的数字。计数器在&#xff08;14号引脚&#xff09;每个时钟脉冲上升时增加 1。计数器达到 9 后&#xff0c;它会在下一个时钟脉冲时从 0 重新开始。 引脚名称管脚 &#xff03;类型描述VD…...

Spring Boot 文件上传和下载指南:从基础到进阶

文章目录 引言1. 环境配置2. 文件上传2.1 配置文件上传路径2.2 创建上传服务2.3 创建上传控制器 3. 文件下载3.1 创建下载服务3.2 创建下载控制器 4. 前端页面4.1 文件上传页面4.2 文件下载页面 5. 技术分析结论 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o …...

Windows Server 2019部署网络负载均衡NLB服务的详细操作步骤

部署前准备 首先需要准备两台Windows Server 2019服务器&#xff0c;虚拟机创建请参考 VMware Workstation安装Windows Server2019系统详细操作步骤_安装windows server 2019操作系统(写出操作过程)-CSDN博客 克隆虚拟机请参考 VMware Workstation克隆虚拟机详细步骤-CSDN博…...

Java增加线程后kafka仍然消费很慢

文章目录 一、问题分析二、控制kafka消费速度属性三、案例描述 一、问题分析 Java增加线程通常是为了提高程序的并发处理能力&#xff0c;但如果Kafka仍然消费很慢&#xff0c;可能的原因有&#xff1a; 网络延迟较大&#xff1a;如果网络延迟较大&#xff0c;即使开启了多线…...

分布式事务实现技术及考虑点

什么是分布式事务&#xff1f; 首先理解什么是本地事务 平时我们在程序中通过Spring去控制事务是利用数据库本身的事务特性来实现的&#xff0c;因此叫数据库事务&#xff0c;由于应用主要靠关系数据库来控制事务&#xff0c;而数据库通常和应用在同一个服务器&#xff0c;所…...

JavaScript中闭包的理解

闭包&#xff08;Closure&#xff09;概念&#xff1a;一个函数对周围状态的引用捆绑在一起&#xff0c;内层函数中访问到其外层函数的作用域。简单来说;闭包内层函数引用外层函数的变量&#xff0c;如下图&#xff1a; 外层在使用一个函数包裹住闭包是对变量的保护&#xff0c…...

传统IO和NIO文件拷贝过程

参考&#xff1a;https://blog.csdn.net/weixin_57323780/article/details/130250582...

算法思想总结:优先级队列

一、最后一块石头的重量 . - 力扣&#xff08;LeetCode&#xff09; 我们每次都要快速找到前两个最大的石头进行抵消&#xff0c;这个时候用优先级队列&#xff08;建大堆&#xff09;,不断取堆顶元素是最好的&#xff01;每次删除堆顶元素后&#xff0c;可以自动调整&#xf…...

《米小圈日记魔法》边看边学,轻松掌握写日记的魔法!

在当今充满数字化娱乐和信息快速变迁的时代&#xff0c;如何创新引导孩子们学习&#xff0c;特别是如何培养他们的写作能力&#xff0c;一直是家长和教育者们关注的焦点。今天就向大家推荐一部寓教于乐的动画片《米小圈日记魔法》&#xff0c;该系列动画通过其独特的故事情节和…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...