百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

centos7.x安装配置redis5.x(centos7 yum安装redis)

mhr18 2024-11-09 12:23 32 浏览 0 评论

下载安装redis

首先,我们需要在redis官网(https://www.redis.cn/,或者:https://redis.io/download/)下载redis安装文件

将下载好的包上传到Centos上并解压(本人上传到了usr/local目录下)


进入redis-5.0.3目录里,执行编译命令

make

如果报错如下的话:

致命错误:jemalloc/jemalloc.h:没有那个文件或目录

那就执行下边这个命令解决

make MALLOC=libc

编译完成之后,就可以将redis安装到指定目录

make PREFIX=/usr/local/redis install

此时/usr/local/redis下生成了一个bin目录


至此安装完成;

启动redis

启动方式一
前台启动,不推荐使用,进入/usr/local/redis/bin里执行启动命令(默认端口号:6379)

./redis-server

cp redis.conf /usr/local/redis/bin/

修改redis.conf 设置为后台启动,将daemonize no改为daemonize yes即可(redis.conf文件内容较多,全局搜索:/daemonize 然后回车,再不断敲N即可)


设置redis访问密码

需要永久配置密码的话就去redis.conf的配置文件中找到requirepass这个参数,如下配置:

修改redis.conf配置文件

# requirepass foobared
requirepass 123   指定密码123

启动Redis:进入/usr/local/redis/bin目录,执行下边命令

./redis-server /usr/local/redis/bin/redis.conf
由于redis.conf与redis-serve在同一级目录,所以执行下边命令即可
./redis-server redis.conf

关闭Redis:进入/usr/local/redis/bin目录,执行下边命令

./redis-cli shutdown

查看redis进程:

ps -ef | grep -i redis

看到如下信息:

root       1218      1  0 12:04 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root       1257   1186  0 12:11 pts/0    00:00:00 grep --color=auto -i redis

可以杀死Redis进程:

kill -9 1218

redis客户端操作

进入 /usr/local/redis/bin/目录:

./redis-cli

此时就可以设置值并取值了:


配置redis

配置允许远程连接Redis

redis 默认只允许自己的本地服务器(127.0.0.1)连接。如果想要其他电脑进行远程连接,将配置文件 redis.conf 中的 bind 127.0.0.1 注释掉(之前没注释,需要改为将其注释掉,默认只能连接本地)。


找到配置文件redis.conf中protected mode,默认protected mode yes,需要将其改为protected mode no

此时,远程就可以连接Redis了;

redis自带客户端连接远程redis服务端

# 进入到redis安装目录的bin目录里,执行如下命令
./redis-cli -h 192.168.237.129 -p 6379

连接上以后就可以向服务端发送命令了,Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG


使用set和get可以向redis设置数据、获取数据:


del删除指定key的内容:

del name

查看当前库中所有的key值:

key  *

SpringBoot连接并操作Redis

引入依赖

 <!--Redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置文件里配置redis

spring:
  application:
    name: order-service
  redis:
    database: 0
    #远程redis地址
    host: 192.168.237.128
    #redis默认端口就是6379
    port: 6379
    timeout: 2000

使用RedisTemplate操作Redis

@Autowired
private StringRedisTemplate redisTemplate;
...........................................
  private Object saveOrderFail(int userId, int productId, HttpServletRequest request){
        //监控报警 start
        String saveOrderKey="save-order";
        String sendValue = redisTemplate.opsForValue().get(saveOrderKey);
        String ip=request.getRemoteAddr();
        //注意,这里需要异步,不能同步,不然此处阻塞的话(发短息耗时的话)不会继续向下走
        new Thread(()->{
            if(StringUtils.isBlank(sendValue)){
                System.out.println("调用发短信接口去发送短信;用户下单失败,请马上处理;"+ip);
                //此时调用发短信接口去发送短信,略过

                /**
                 * 在Redis里放入数据,防止一直不停的发短信
                 * 间隔时间20秒(正常比这个数据久,这里为了测试先设置20秒)
                 */
                redisTemplate.opsForValue().set(saveOrderKey,"save-order-fail",20, TimeUnit.SECONDS);
            }else{
                System.out.println("已经发生过短信了,20秒内不要发了");
            }
        }).start();
        
        //监控报警 end
        Map<String,Object> msg=new HashMap<>();
        msg.put("code",-1);
        msg.put("msg","抢购人数太多,稍后重试");
        return msg;
    }

使用RedisTemplate从redis里取数据

//从缓存里取数据
public Article findById(String id) {
	//从缓存中提取
	Article article=(Article)redisTemplate.opsForValue().get("article_"+id);
	// 如果缓存没有则到数据库查询并放入缓存
	if(article==null) {
		article = articleDao.findById(id).get();
		redisTemplate.opsForValue().set("article_" + id, article);
	}
	return article;
}

修改或删除数据库时使用RedisTemplate清空缓存

/**
* 修改
* @param article
*/
public void update(Article article) {
	redisTemplate.delete( "article_" + article.getId() );//删除缓存
	articleDao.save(article);
} 
/**
* 删除
* @param id
*/
public void deleteById(String id) {
	redisTemplate.delete( "article_" + id );//删除缓存
	articleDao.deleteById(id);
}

使用RedisTemplate设置缓存过期时间

//过期时间为一天
redisTemplate.opsForValue().set("article_" + id, article,1,
TimeUnit.DAYS);

//过期时间为10秒
redisTemplate.opsForValue().set("article_" + id, article,10,
TimeUnit.SECONDS);


相关推荐

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

后端开发必看!Redis 哨兵机制如何保障系统高可用?

你是否曾在项目中遇到过Redis主服务器突然宕机,导致整个业务系统出现数据读取异常、响应延迟甚至服务中断的情况?面对这样的突发状况,作为互联网大厂的后端开发人员,如何快速恢复服务、保障系统的高可用...

Redis合集-大Key处理建议

以下是Redis大Key问题的全流程解决方案,涵盖检测、处理、优化及预防策略,结合代码示例和最佳实践:一、大Key的定义与风险1.大Key判定标准数据类型大Key阈值风险场景S...

深入解析跳跃表:Redis里的&quot;老六&quot;数据结构,专治各种不服

大家好,我是你们的码农段子手,今天要给大家讲一个Redis世界里最会"跳科目三"的数据结构——跳跃表(SkipList)。这货表面上是个青铜,实际上是个王者,连红黑树见了都要喊声大哥。...

Redis 中 AOF 持久化技术原理全解析,看完你就懂了!

你在使用Redis的过程中,有没有担心过数据丢失的问题?尤其是在服务器突然宕机、意外断电等情况发生时,那些还没来得及持久化的数据,是不是让你夜不能寐?别担心,Redis的AOF持久化技术就是...

Redis合集-必备的几款运维工具

Redis在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来,从这三个方面,介绍一些工具。先来学习下监控Redis实时...

别再纠结线程池大小 + 线程数量了,没有固定公式的!

我们在百度上能很轻易地搜索到以下线程池设置大小的理论:在一台服务器上我们按照以下设置CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2你不会真的按照这个理论来设置线程池的...

网络编程—IO多路复用详解

假如你想了解IO多路复用,那本文或许可以帮助你本文的最大目的就是想要把select、epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别。基础知识IO多路复用涉及...

5分钟学会C/C++多线程编程进程和线程

前言对线程有基本的理解简单的C++面向过程编程能力创造单个简单的线程。创造单个带参数的线程。如何等待线程结束。创造多个线程,并使用互斥量来防止资源抢占。会使用之后,直接跳到“汇总”,复制模板来用就行...

尽情阅读,技术进阶,详解mmap的原理

1.一句话概括mmapmmap的作用,在应用这一层,是让你把文件的某一段,当作内存一样来访问。将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程...

C++11多线程知识点总结

一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多...

微服务高可用的2个关键技巧,你一定用得上

概述上一篇文章讲了一个朋友公司使用SpringCloud架构遇到问题的一个真实案例,虽然不是什么大的技术问题,但如果对一些东西理解的不深刻,还真会犯一些错误。这篇文章我们来聊聊在微服务架构中,到底如...

Java线程间如何共享与传递数据

1、背景在日常SpringBoot应用或者Java应用开发中,使用多线程编程有很多好处,比如可以同时处理多个任务,提高程序的并发性;可以充分利用计算机的多核处理器,使得程序能够更好地利用计算机的资源,...

用 C++ 写线程池是怎样一种体验?

在过去的几年里,我用C++写过各种各样的线程池,包括最简单固定线程数的、运行时动态调整线程数的、有存活时间的、有任务队列长度限制的、底层用纤程的、支持多个线程池合并以复用资源的、脱离管程完全从底层...

TCP/IP协议栈在Linux内核中的运行时序分析

本文主要是讲解TCP/IP协议栈在Linux内核中的运行时序,文章较长,里面有配套的视频讲解,建议收藏观看。1Linux概述  1.1Linux操作系统架构简介Linux操作系统总体上由Linux...

取消回复欢迎 发表评论: