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

「建议收藏」手把手教你从零搭建一个redis服务

mhr18 2024-10-23 11:37 34 浏览 0 评论


前言

自己在搭建redis服务的时候碰到一些问题,好多人只告诉你怎么成功搭建,但是并没有整理过程中遇到的问题,所有楼主就花了点时间来整理下。

  • linux环境安装redis
  • 安装中的碰到的问题和解决办法
  • 怎么在代码中使用安装的redis
  • 设置用户名和密码
  • 程序应用中碰到的问题


介绍

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

一、安装redis

1、下载安装包

cd /www/redis/
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
mv redis-4.0.8 redis


2、编译redis

cd /www/redis/redis/
make MALLOC=libc
make PREFIX=/usr/local/redis install


3、准备配置文件

cd /usr/local/redis
mkdir conf
cd conf/
vi redis_6379.conf


配置文件内容如下:

bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /www/redis/data/redis/6379/redis_6379.pid
loglevel notice
logfile "/www/redis/data/redis/6379/log.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /www/redis/data/redis/6379/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64


4、启动服务

mkdir -p /www/redis/data/redis/6379/
cd ../bin/
./redis-server ../conf/redis_6379.conf


5、使用客户端链接

./redis-cli

判断是否启动成功


6、使用

查看数据

keys *

设置值

 set oneKey 测试

获取值

get oneKey


二、安装中的碰到的问题和解决办法

问题一:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.



临时解决办法:

echo 511 > /proc/sys/net/core/somaxconn

永久解决办法

vi /etc/sysctl.conf



在里面添加net.core.somaxconn= 1024 然后执行sysctl -p 就可以永久消除这个warning

问题二:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.



可以参考问题一的解决

问题三:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled



执行命令echo never>/sys/kernel/mm/transparent hugepage/enabled

永久解决添加配置文件即可

vi /etc/rc.local




三、怎么在代码中使用安装的redis呢

需要引用的jar包有

commons-pool-1.6.jar
jedis-2.9.0.jar

示例代码

 public static void main(String[] args) {
 //创建redis对象
 String ip = "";
 Jedis jedis=new Jedis(ip,6379);//链接redis
 //记录操作个数
 jedis.set("name", "小明");
 System.out.println("name已经赋值");
 String name = jedis.get("name");
 System.out.println("赋值后获取name的值为:"+name);
 jedis.del("name");
 System.out.println("name已经删除");
 String nameT = jedis.get("name");
 System.out.println("删除后获取name的值为:"+nameT); 
 }
//结果
name已经赋值
赋值后获取name的值为:小明
name已经删除
删除后获取name的值为:null

四、设置用户名和密码

1、在配置文件中redis_6379.conf直接添加requirepass 123456

2、通过命令添加

设置密码

#设置密码
config set requirepass 123456



查看密码

config get requirepass

需要验证密码以后才可以查看

测试代码

 public static void main(String[] args) {
 //创建redis对象
 String ip = "";
 Jedis jedis=new Jedis(ip,6379);//链接redis
 jedis.auth("123456");
 //记录操作个数
 jedis.set("name", "小明");
 System.out.println("name已经赋值");
 String name = jedis.get("name");
 System.out.println("赋值后获取name的值为:"+name);
 jedis.del("name");
 System.out.println("name已经删除");
 String nameT = jedis.get("name");
 System.out.println("删除后获取name的值为:"+nameT);
 
 }
 #结果
name已经赋值
赋值后获取name的值为:小明
name已经删除
删除后获取name的值为:null

五、应用中碰到的问题

链接被拒绝或者超时问题



redis刚开始配置的ip是默认ip和端口127.0.0.1:6379,这个ip只能服务的本地进行链接。解决办法:

在配置文件中把这个ip给注释



在阿里云中配置安全组

修改好配置文件和安全组以后,可以通过阿里云服务的外网ip和redis的端口访问。

但是呢,又报一个问题,保护模式下拒绝访问



根据提示修改配置文件redis_6379.conf中属性protected-mode no,并重启服务



再次测试代码连接正常~

关注公众号“莫非技术栈”可以免费领取学习资料哦~

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: