首页 > 数据库 >Redis的详细安装教程和环境变量配置(附有详细步骤讲解及相关操作截图和代码)

Redis的详细安装教程和环境变量配置(附有详细步骤讲解及相关操作截图和代码)

时间:2024-10-26 10:42:52浏览次数:6  
标签:截图 key Redis 数据库 元素 redis 详细 集合

NoSQL简介

NoSQL数据库是一种非关系型数据库,它在处理大规模、高并发的动态网站数据时具有明显优势。NoSQL数据库的出现是为了解决传统关系数据库在处理大数据量和高并发请求时遇到的性能瓶颈。NoSQL数据库的设计允许它们在分布式环境中更有效地扩展,同时提供灵活的数据模型来适应不断变化的数据需求。

NoSQL的四大分类

1. 键值(Key-Value)存储数据库

  • 特点:这种类型的数据库使用一个简单的键值对模型,其中键是一个唯一的标识符,值是与键相关联的数据。这种模型易于实现和部署,但在需要查询或更新部分数据时,效率可能较低。
  • 相关产品
    • Redis:一个开源的、基于内存的键值存储,常用作数据库、缓存或消息代理。
    • Tokyo Cabinet/Tyrant:一个持久化的键值存储系统,支持多种数据类型和原子操作。
    • SSDB:一个基于磁盘的键值存储系统,支持多种数据类型和持久化。
    • Voldemort:一个分布式键值存储系统,用于处理大规模数据集。
    • Oracle BDB:Oracle提供的高性能、可扩展的键值存储解决方案。

2. 列存储数据库

  • 特点:这种类型的数据库适用于处理大量数据,其中数据按列存储,这使得查询特定列变得非常高效。列存储数据库通常用于时间序列数据、日志数据和其他需要高效写入和查询的场景。
  • 相关产品
    • Cassandra:一个分布式NoSQL数据库,设计用于处理大量数据跨多个数据中心。
    • HBase:一个分布式、可扩展的大数据存储系统,建立在Hadoop之上。
    • ClickHouse:一个用于在线分析处理(OLAP)的列式数据库管理系统。

3. 文档型数据库

  • 特点:文档型数据库存储半结构化的文档,如JSON或BSON格式。这些数据库提供了比键值数据库更丰富的查询功能,并且可以存储复杂的数据结构。
  • 相关产品
    • MongoDB:一个流行的开源文档型数据库,支持高吞吐量的数据持久化。
    • CouchDB:一个使用HTTP和JSON的分布式、面向文档的数据库。
    • SequoiaDB:一个支持SQL的文档型数据库,适用于处理大规模数据集。

4. 图形(Graph)数据库

  • 特点:图形数据库使用图形模型来存储和查询数据,这使得它们非常适合处理复杂的关系和网络结构。图形数据库在社交网络分析、推荐系统和路径查找等领域有广泛应用。
  • 相关产品
    • Neo4J:一个高性能的图形数据库,支持ACID事务和丰富的图形查询语言Cypher。
    • InfoGrid:一个分布式图形数据库,支持大规模图形数据的存储和查询。
    • Infinite Graph:一个可扩展的图形数据库,提供高性能的图形查询能力。

NoSQL应用场景

NoSQL数据库适用于以下场景:

  • 数据模型简单:当数据结构不复杂,且不需要复杂的事务支持时。
  • 需要灵活的IT系统:当系统需要快速适应数据模型的变化时。
  • 对数据库性能要求高:当需要处理大量数据和高并发请求时。
  • 不需要高度数据一致性:当可以接受最终一致性模型,以换取更好的性能和可扩展性时。

Redis概述

image-20220511203523936

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存、消息中间件和流引擎。Redis以其高性能和低延迟而闻名,特别适合实时数据存储和访问。

Redis特点

高性能

  • Redis的所有操作都是内存中进行的,这意味着它的读写速度非常快。内存中的数据存储方式使得Redis能够处理大量的并发请求,而不会出现传统磁盘数据库那样的性能瓶颈。

丰富的数据类型

  • Redis支持多种数据类型,包括字符串(string)、列表(list)、集合(set)、有序集合(sorted set)和哈希(hash)。这些数据类型为开发人员提供了灵活的方式来存储和处理数据。

持久化

  • 尽管Redis是基于内存的,但它提供了持久化机制,可以将内存中的数据保存到磁盘上。这确保了即使在系统崩溃后,数据也不会丢失。Redis支持两种持久化方式:快照(RDB)和追加文件(AOF)。

单线程、单进程

  • Redis的单线程模型意味着它在处理客户端请求时不需要考虑线程安全问题。这简化了Redis的内部实现,并有助于提高性能。然而,这也意味着Redis的性能受限于单个CPU核心的处理能力。尽管如此,Redis仍然能够通过优化内存管理和网络I/O来实现高吞吐量。

Redis的这些特点使其成为许多现代应用程序的理想选择,特别是在需要高性能和可扩展性的场景中。

Redis详细安装步骤

以下是Redis安装的详细步骤,包括环境准备、下载、安装和启动服务,需要注意的是,安装和配置过程中相关一些的命令需要在特定的目录下才能执行

环境准备

  • 虚拟机软件:使用VMware 12.x或以上版本。
  • 操作系统:使用CentOS 7.x或以上版本。

下载Redis源码包

  1. 访问Redis官方网站:https://redis.io/
  2. 下载Redis源码包,例如redis-7.0.0.tar.gz

上传源码包到Linux

将下载的源码包上传到你的Linux服务器
image-20241025150757943

解压缩文件

在Linux服务器上,使用以下命令解压缩Redis源码包(这里我们选择解压到上级目录):

tar -zxvf redis-7.0.0.tar.gz -C ../

image-20241025152335912

安装gcc

Redis的编译需要gcc编译器,如果系统中尚未安装,可以使用以下命令安装(进入到解压目录里安装):
image-20241025152859434

yum install -y gcc
yum install -y tcl

分别执行两个命令,安装过程不报错即可安装成功
image-20241025153130133

编译Redis

进入解压缩后的Redis目录,并执行编译命令:

make MALLOC=libc

image-20241025153350920

安装Redis

使用以下命令安装Redis到指定目录:

make install PREFIX=/usr/local/soft/redis

image-20241025162207814
image-20241025162442402

配置环境变量(在/usr/local/soft/redis目录下)

为了在任意目录下执行Redis命令,可以设置环境变量:

vim /etc/profile

添加如下变量并保存退出(wq)

export REDIS_HOME=/usr/local/soft/redis
export PATH=.:$PATH:$REDIS_HOME/bin

image-20241025163733031

执行source命令使环境变量生效

source /etc/profile

image-20241025163848944

启动Redis服务(验证redis是否安装成功,并且可以使用)

这里选择在soft目录下新建bigdata32目录,并在bigdata32中新建redis-test目录,进入redis-test启动redis服务(这里看自己需求创建目录即可,创建目录使用命令mkdir-目录名)
image-20241025164412326

redis-server

image-20241025164446296

查看当前是否有redis服务

ps aux|grep redis

修改端口号

由于在哪里启动redis哪个目录就是一个数据库,一台服务器可以有多个redis服务,但redis端口号默认是6379,当启动多个服务时会发生端口号冲突导致启动服务失败
image-20241025172429821

解决方案是要修改Redis服务的端口号,需要编辑redis.conf配置文件中的port设置。配置文件通常位于Redis-7.0.0的安装目录下。
image-20241025200620329

修改前,这里先选择在bigdata32目录下新建redis-ports文件夹,在里面创建7000和7001两个文件夹(一个存放7000端口号一个存放7001,端口号可以自行修改只要不和其他的端口号冲突即可),现在7000和7001两个文件里都是空的,我们需要将配置文件复制过来

创建7000和7001
mkdir7000

mkdir7001

复制配置文件(注意路径是否和自己的路径一样)
cp /usr/local/soft/jars/redis-7.0.0/redis.conf ./7000/

cp /usr/local/soft/jars/redis-7.0.0/redis.conf ./7001/

image-20241025201434771
复制完成后进入7000目录下修改redis.conf文件

vim redis.conf

image-20241026100847345

进入配置文件后找到端口号6379修改为7000
image-20241025201733800
修改后先不要急着退出,这里还需要修改两个参数,否者是无法使用第三方可视化工具连接redis的,具体如下图(应该是在配置文件中端口号的上面去找),修改成和图中一样即可,记得使用wq保存并退出
image-20241025202434721

检验是否修改成
指定当前目录去启动redis

 redis-server ./redis.conf

image-20241025203103539
image-20241025203301405

到这里就基本修改完成了,另一个7001的配置文件和7000的一样去修改就行了
6379端口号的只要修改后面两个参数就行了

测试使用客户端连接Redis服务

使用Redis客户端连接到Redis服务,要连接到特定IP地址和端口号上的Redis服务,可以使用以下命令:

./redis-cli -h localhost -p 7000

其中./表示当前目录下 -h 服务器的ip地址 -p 端口号

image-20241026102709829

如果Redis服务运行在默认端口(6379)上,可以省略-p 6379参数(默认就是6379)。

Redis数据库相关指令

Redis基本数据类型及操作指令

1. String类型

  • 内存存储模型:简单的key/value对,value可以是字符串、整数或浮点数。
  • 常用操作命令
    • set:设置key的值。
    • get:获取key的值。
    • mset:同时设置多个key-value对。
    • mget:同时获取多个key的值。
    • getset:获取key的值,并设置新的值。
    • strlen:获取key值的长度。
    • append:向key的值追加字符串。
    • getrange:获取key值的子字符串。
    • setex:设置key的值,并指定过期时间(秒)。
    • psetex:设置key的值,并指定过期时间(毫秒)。
    • setnx:如果key不存在,则设置key的值。
    • decr:将key的整数值减1。
    • decrby:将key的整数值减去指定数值。
    • incr:将key的整数值加1。
    • incrby:将key的整数值加上指定数值。
    • incrbyfloat:将key的浮点数值加上指定浮点数值。

2. List类型

  • 内存存储模型:元素有序且可重复的列表,可以作为栈或队列使用。
  • 常用操作指令
    • lpush:在列表左侧插入元素。
    • lpushx:仅当列表存在时,在左侧插入元素。
    • rpush:在列表右侧插入元素。
    • rpushx:仅当列表存在时,在右侧插入元素。
    • lpop:从列表左侧弹出元素。
    • rpop:从列表右侧弹出元素。
    • lrange:获取列表指定范围内的元素。
    • llen:获取列表长度。
    • lset:设置列表指定索引的元素。
    • lindex:获取列表指定索引的元素。
    • lrem:移除列表中与给定值相等的元素。
    • ltrim:修剪列表,保留指定范围内的元素。
    • linsert:在列表中的元素前或后插入新元素。

3. Set类型

  • 特点:元素无序且不可重复的集合。
  • 常用命令
    • sadd:向集合添加元素。
    • smembers:获取集合的所有元素。
    • scard:获取集合的元素个数。
    • spop:随机弹出集合中的一个元素。
    • smove:将元素从源集合移动到目标集合。
    • srem:从集合中移除元素。
    • sismember:检查元素是否是集合的成员。
    • srandmember:随机返回集合中的一个或多个元素。
    • sdiff:返回两个集合的差集。
    • sinter:返回两个集合的交集。
    • sunion:返回两个集合的并集。

4. ZSet类型

  • 特点:可排序的set集合,元素不可重复,每个元素关联一个分数。
  • 常用命令
    • zadd:向有序集合添加元素。
    • zcard:获取有序集合的元素个数。
    • zrange:按分数从小到大获取有序集合的元素。
    • zrevrange:按分数从大到小获取有序集合的元素。
    • zrangebyscore:按分数范围获取有序集合的元素。
    • zrank:获取元素在有序集合中的排名。
    • zrevrank:获取元素按分数从大到小在有序集合中的排名。
    • zscore:获取元素的分数。
    • zrem:移除有序集合中的元素。
    • zincrby:有序集合中元素的分数增加指定数值。

5. Hash类型

  • 特点:value是一个map结构,key无序,适合存储对象。
  • 常用命令
    • hset:为哈希表添加字段。
    • hget:获取哈希表中字段的值。
    • hgetall:获取哈希表中所有的字段和值。
    • hdel:删除哈希表中的字段。
    • hexists:检查字段是否存在于哈希表中。
    • hkeys:获取哈希表中所有的字段名。
    • hvals:获取哈希表中所有的值。
    • hmset:同时设置哈希表中的多个字段。
    • hmget:同时获取哈希表中的多个字段的值。
    • hsetnx:仅当字段不存在时设置字段的值。
    • hincrby:哈希表中字段的整数值增加指定数值。
    • hincrbyfloat:哈希表中字段的浮点数值增加指定浮点数值。

可视化工具(连接时都要先启动redis服务)

DataGrip(在IDEA官网就能找到,好用但是需要收费,只能试用一个月)

https://www.jetbrains.com.cn/datagrip/promo/

image-20241025205225616

Redis Insight(redis官方提供的,免费的)

https://redis.io/insight/
连接步骤和DataGrip相似

使用JAVA连接redis

在开始之前,请确保你已经添加了 Jedis 依赖到你的项目中。如果你使用的是 Maven,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>版本号</version>
</dependency>

image-20241026104347010
测试连接
image-20241026104230000

使用示例

String 类型操作

String 类型是 Redis 中最基本的数据结构,对应的 Java 操作如下:

// 设置 key-value 对
jedis.set("name", "法海");

// 获取 value
String name = jedis.get("name");
System.out.println(name);

// 设置 key 的过期时间,单位为秒
jedis.expire("name", 10);

// 检查 key 是否存在
boolean exists = jedis.exists("name");
System.out.println(exists);

List 类型操作

List 类型是一个有序列表,可以进行两端添加和删除操作。

// 将多个值添加到列表的头部
long listLength = jedis.lpush("list1", "hello", "world", "apple");
System.out.println("List length: " + listLength);

// 获取列表中的元素
List<String> listElements = jedis.lrange("list1", 0, -1);
System.out.println("List elements: " + listElements);

Set 类型操作

Set 类型是一个无序集合,可以添加、删除和查询元素。

// 向集合中添加元素
jedis.sadd("set1", "cat", "dog", "fish");

// 获取集合中的所有元素
Set<String> setMembers = jedis.smembers("set1");
System.out.println("Set members: " + setMembers);

ZSet 类型操作

ZSet 类型是一个有序集合,每个元素都有一个分数与之关联。

// 向有序集合中添加元素
HashMap<String, Double> scoreMap = new HashMap<>();
scoreMap.put("小白", 100.0);
scoreMap.put("小青", 50.1);
scoreMap.put("小花", 120.2);
scoreMap.put("小马", 99.3);
jedis.zadd("scores", scoreMap);

// 获取有序集合中分数在指定范围内的元素
List<Tuple> scores = jedis.zrangeByScoreWithScores("scores", 50, 200);
for (Tuple score : scores) {
    String element = score.getElement();
    double scoreValue = score.getScore();
    System.out.println(element + "-" + scoreValue);
}

Hash 类型操作

Hash 类型是一个键值对集合,适合存储对象。

// 向哈希表中添加字段
HashMap<String, String> studentMap = new HashMap<>();
studentMap.put("name", "小白");
studentMap.put("age", "18");
studentMap.put("sex", "女");
studentMap.put("clazz", "一班");
jedis.hset("student", studentMap);

// 获取哈希表中的所有字段和值
Map<String, String> student = jedis.hgetAll("student");
for (Map.Entry<String, String> entry : student.entrySet()) {
    System.out.println(entry.getKey() + "-" + entry.getValue());
}

断开连接

最后,不要忘记关闭与 Redis 的连接。

jedis.close();

以上是 Redis 五种基本数据类型的操作示例,包括 String、List、Set、ZSet 和 Hash。每个示例都包含了详细的代码解析注释,帮助你更好地理解和使用 Redis。

注意事项

  1. 防火墙设置:确保Linux服务器的防火墙设置允许Redis服务使用的端口。
  2. 端口占用:检查是否有其他服务占用了Redis服务的端口,可以使用netstat -tulnp命令查看端口使用情况。

通过以上步骤,你可以成功安装并使用Redis数据库。可视化工具可以帮助你更直观地管理和操作Redis数据。

标签:截图,key,Redis,数据库,元素,redis,详细,集合
From: https://www.cnblogs.com/bjynjj/p/18503740

相关文章

  • redis数据库操作指令
    一、数据库操作指令2、redis中库说明对于一个redis服务而言,包含默认有16个数据库给我们使用,从0开始编号,共15号数据库,默认使用的是0号数据库切换库,select库号举例:使用1号库:select1库和库之间数据不共享库和库之间的键可以重名2、redis中清空库的指令清空当前库flush......
  • Redis
    Redis基础是什么(定义,特点)开源的基于内存的数据库(内疚多缘分)基于内存:读写速度快,适用于高性能应用场景,如缓存持久化:把数据存储到磁盘,方式有AOF日志,RDB快照等多数据结构:列表、哈希、集合等,灵活的应对不同场景原子性操作:支持原子性操作,维护并发环境下数据一致性分布式:提供......
  • Redis面试题扩展
    一、redis特性1、内存数据快,快,很快...2、工作单线程worker,串行化、原子操作,(IO线程是多线程)-避免上下文切换3、IO模型(epoll),天生支撑高并发4、kv模型,v具有类型结构5、具有本地方法,计算向数据移动。(a,b)=>交集6、二进制安全,Value最大512M二、Redis是单线程还是多线......
  • Redis基础知识(学习笔记1--五种基础数据结构)
    Redis,Remote Dictionary Server,远程字典服务。Redis的性能极高:其读的速度可以达到11W/s,写的速度可以到达8W/s。高性能的原因(1)操作在内存中发生;(2)C语言开发;(3)源码简单精细(集性能与优雅于一身),早期版本源码只有2W行左右,从3.0版本(开始支持cluster),代码变成了5W左右。Redis有5种......
  • 苍穹外卖 将菜品缓存到Redis
        CategoryController,用户端查询分类id及其分类下对应的菜品,假如是第一次查询,那么就从数据库中查询并加入redis缓存中,若不是第一次查询,那么直接从redis中查询,不再查询数据库。//redis缓存菜品,减少数据库的查询//在数据库中查找属于IO,假如有很多用户同时访问,那么......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......