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 {
​
    @Bean
    public 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 {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void textRedisType(){
        /**
         * 操作字符串类类型数据
         */
        // 添加字符串类型数据-并设置有效时间
        redisTemplate.opsForValue().set("name","zhangshanc",20, TimeUnit.MILLISECONDS);
        // 对应key不存在时设置对应的key的值--对应redis中的setnx指令
        redisTemplate.opsForValue().setIfAbsent("age","12");
​
        /**
         * 操作哈希类型数据--其他指令见名知意
         */
        // 添加hash类型的数据使用put--对应redis中的指令为hset
        redisTemplate.opsForHash().put("11","name","tom");
    }
}

注意:redis中通用类型的数据直接使用RedisTemplate对象直接操作

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

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

相关文章

二二复制模式,发展下属并形成一个销售网络体系来实现收入增长!

二二复制模式&#xff0c;又称为双轨制&#xff0c;是一种直销理念的营销模式&#xff0c;其核心在于通过发展下属并形成一个销售网络体系来实现收入增长。以下是对二二复制模式的详细讲解&#xff0c;包括其优势和玩法介绍&#xff0c;以及适合的行业。 一、二二复制模式的定…

刚办理的手机号被停用,你可能遇到这些问题了!

很多朋友都会遇到手机号被停用的情况&#xff0c;那么你知道你的手机号为什么会被停用吗&#xff1f;接下来&#xff0c;关于手机号被停用的问题&#xff0c;跟着小编一块来了解一下吧。 ​停机的两种形态&#xff1a; 1、第一个是局方停机&#xff0c;即语音、短信和流量都不…

opencv实现人脸检测功能----20240704

opencv实现人脸检测 早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。OpenCV 的官方版本中包含了一个更准确、基于深度学习的人脸检测器, 链接:基于深度学习…

Day04-SonarQube

Day04-SonarQube 1.SonarQube基本概述1.1 什么是SonarQube1.2 使用SonarQube前提环境要求 2. SonarQube服务安装-8.9 lts (PostgreSQL)2.1 环境准备2.2 安装Sonarqube依赖工具 -PSQL 2.SonarQube服务安装-7.7 (MySQL)故障与排查 3.Sonarqube插件管理4. 创建项目及分析1) 分析ja…

简历–求职信–通用

每个毕业生的简历首页大概都会是一封求职信。如果说对求职者的简历正文我们只是浮光掠影看上几眼的话&#xff0c;那么对求职信&#xff0c;简直连浮光掠影都称不上。说实话&#xff0c;我在看求职者简历的时候一般会把这一页翻过去&#xff0c;很少去看。为什么呢&#xff1f;…

springboot宠物领养系统-计算机毕业设计源码08373

目 录 摘要 1 绪论 1.1选题依据 1.2国内外研究现状 1.3相关技术介绍 1.4论文结构与章节安排 2 基于springboot宠物领养系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2经济可行性分析 2.1.3操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

java 常见错误问题

1.java中datetime数据类型如何定义 在Java中&#xff0c;可以使用java.time包中的DateTime类来定义DateTime数据类型。 要定义DateTime数据类型&#xff0c;你可以使用以下代码&#xff1a; public static void test() {// 获取当前日期和时间LocalDateTime datetime Local…

如何利用AI撰写短文案获客?分享6大平台和3大步骤!

从去年开始&#xff0c;很多大厂都在裁员&#xff0c;原因就是因为AI的火爆&#xff0c;替代了很多机械式的劳动力。以前很多人可以通过机械式的工作来摸鱼&#xff0c;现在AI完成的效率比人工的要高很多倍。 国内好用的AI平台非常多&#xff0c;有时候也可以使用几个AI平台结合…

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了

RAG 工业落地方案框架&#xff08;Qanything、RAGFlow、FastGPT、智谱RAG&#xff09;细节比对&#xff01;CVPR自动驾驶最in挑战赛赛道&#xff0c;全球冠军被算力选手夺走了。 本文详细比较了四种 RAG 工业落地方案 ——Qanything、RAGFlow、FastGPT 和智谱 RAG&#xff0c;重…

后端之路——最规范、便捷的spring boot工程配置

一、参数配置化 上一篇我们学了阿里云OSS的使用&#xff0c;那么我们为了方便使用OSS来上传文件&#xff0c;就创建了一个【util】类&#xff0c;里面有一个【AliOSSUtils】类&#xff0c;虽然本人觉得没啥不方便的&#xff0c;但是黑马视频又说这样还是存在不便维护和管理问题…

Artificial Intelligence Self-study

Artificial Intelligence Self-study Traditional AI (Symbolic AI) 基于&#xff1a;符号表示 数理逻辑 搜索 - 有明确规则&#xff0c;依靠算力。Appliance &#xff1a; 数学难题(Heuristic Algorithm)&#xff0c;棋牌对抗(围棋)&#xff0c;专家系统(输入病症&#xf…

02-android studio实现下拉列表+单选框+年月日功能

一、下拉列表功能 1.效果图 2.实现过程 1&#xff09;添加组件 <LinearLayoutandroid:layout_width"match_parent"android:layout_height"wrap_content"android:layout_marginLeft"20dp"android:layout_marginRight"20dp"android…

使用Anaconda虚拟环境安装Opencv、pytorch、torchvision踩坑记录

电脑 python 环境版本过高与下载Opencv&#xff08;3.4以下&#xff09;不匹配&#xff0c;因为版本过高部分算法收米&#xff0c; 从而在虚拟环境重新下载python老版本 本文默认您的电脑上已经安装了Anaconda 我是按照这位博文安装的 安装Opencv (详解)安装3.4.1.15版本…

java数据结构集合复习之包装类和泛型

前言: 这是我最一年学习java的一部分的回顾总结 1.包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 1.1基本数据类型和对应的包装类 ----—基本数据类型包装类…

14. Revit API: Selection(选择器)

前言 这篇写选择器&#xff0c;经过前面好些篇的讲解&#xff0c;总算把前置内容都写完了。 我们来回忆下都在哪里提到过… 算了&#xff0c;直接进入正文。 一、Selection 命名空间 选择器位于Autodesk.Revit.UI.Selection命名空间下&#xff0c;关系到交互嘛&#xff0c;所…

Dns被莫名篡改的逆向分析定位(笔记)

引言&#xff1a;最近发现用户的多台机器上出现了Dns被莫名修改的问题&#xff0c;从系统事件上看并未能正常确定到是那个具体软件所为&#xff0c;现在的需求就是确定和定位哪个软件具体所为。 解决思路&#xff1a; 首先到IPv4设置页面对Dns进行设置&#xff1a;通过ProcExp…

【Axure高保真原型】中继器表格——移入显示详情卡片案例

今天和大家分享中继器表格——移入显示详情卡片的原型模板&#xff0c;鼠标移入员工号或姓名会弹出员工卡片&#xff0c;可以查看更详细的信息。这个表格是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要维护中继器表格里的信息&#xff0c;即可自动生成交互效…

实操Nginx+Tomcat多实例部署,实现负载均衡和动静分离

192.168.10.10 192.168.10.20 192.168.10.30 location ~ \.jsp$ {proxy_pass http://192.168.10.50:8080;} location ~ \.(jsp|html)$ {root /usr/share/nginx/html;}192.168.10.40和192.168.10.50用脚本完成搭建此处安装附上脚本&#xff1a; #!/bin/bash# 定义变量 JDK_PACKA…

生态系统NPP及碳源、碳汇模拟技术教程

原文链接&#xff1a;生态系统NPP及碳源、碳汇模拟技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608293&idx3&sn2604c5c4e061b4f15bb8aa81cf6dadd1&chksmfa826602cdf5ef145c4d170bed2e803cd71266626d6a6818c167e8af0da93557c1288da21a71&a…

nginx 搭理禅道

1.安装nginx。 2.安装禅道。 3.nginx 配置文件 location /zentao/ { proxy_pass http://192.168.100.66/zentao/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-F…