如何在Linux下Redis安装

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 如何在Linux下Redis安装

redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的。项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便 redis、memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求;但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加载链表,redis可以对链表新增或者修改)

1:下载redis

wget http://download.redis.io/releases/redis-5.0.9.tar.gz

2:安装redis

下载后解压 tar zxvf redis-1.2.6.tar.gz 到任意目录,例如/usr/local/redis-5.0.9

解压后,进入redis目录

cd /usr/local/redis-5.0.9

make

make install

如果失败,可能要安装

yum -y install gcc automake autoconf libtool make
make MALLOC=libc

拷贝文件

进/usr/local/redis-5.0.9

cp redis.conf /etc/ 这个文件时redis启动的配置文件

再进/src

cp redis-benchmark redis-cli redis-server /usr/bin/ #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行

设置内存分配策略(可选,根据服务器的实际情况进行设置)

cat /proc/sys/vm/overcommit_memory

可选值:0、1、2。

sysctl vm.overcommit_memory=1

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,表示内核允许分配超过所有物理内存和交换空间总和的内存


值得注意的一点是,redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent 占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)

 

开启redis端口,修改防火墙配置文件

   vi /etc/sysconfig/iptables  


加入端口配置

   -A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT  


重新加载规则

   service iptables restart  


3:启动redis服务

   [root@Architect redis-1.2.6]# pwd  

   /usr/local/redis-1.2.6  

   [root@Architect redis-1.2.6]# redis-server /etc/redis.conf


查看进程,确认redis已经启动


   [root@Architect redis-1.2.6]# ps -ef | grep redis  

   root       401 29222  0 18:06 pts/3    00:00:00 grep redis  

   root     29258     1  0 16:23 ?        00:00:00 redis-server /etc/redis.conf

查看被6379 占用的端口情况

[root@Architect redis-1.2.6]# netstat -nltp|grep 6379

如果这里启动redis服务失败,一般情况下是因为redis.conf文件有问题,建议检查或找个可用的配置文件进行覆盖,避免少走弯路,这里建议,修改redis.conf,设置redis进程为后台守护进程


   # By default Redis does not run as a daemon. Use 'yes' if you need it.  

   # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.  

   daemonize yes  

4:测试redis

   [root@Architect redis-1.2.6]# redis-cli  

   redis> set name songbin  

   OK  

   redis> get name  

   "songbin"  


5:关闭redis服务

   redis-cli shutdown  


redis服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定

强制备份数据到磁盘,使用如下命令


   redis-cli save 或者 redis-cli -p 6380 save(指定端口)

6.清除数据

flushdb/flushall

fredis> FLUSHALL

redis.conf

timeout设置为0,取消idle客户端

配置文件

/etc/redis.conf 改动的几处:

daemonize yes

timeout 0

logfile /home/jiangguilong/redisdata/redis.log

dbfilename rabbit.rdb

dir /home/jiangguilong/redisdata/

 

数据库文件

/home/jiangguilong/redisdata/rabbit.rdb

日志文件

/home/jiangguilong/redisdata/redis.log

在make 2.2.5版本的时候会遇到这样的问题,好像是在2.2.8解决了:

Redis version of redis-2.2.7.tar.gz,my linux System is b2d..

error msg:

root@yes7k:/usr/local# cd redis-2.2.7/

root@yes7k:/usr/local/redis-2.2.7# make

cd src && make all

make[1]: Entering directory `/usr/local/redis-2.2.7/src'

cd ../deps/hiredis && make static ARCH=""

make[2]: Entering directory `/usr/local/redis-2.2.7/deps/hiredis'

Make18: 在“else”指令之后含有不该出现的文字

Make27: *** 每个条件只能有一个“else”。 停止。

make[2]: Leaving directory `/usr/local/redis-2.2.7/deps/hiredis'

make[1]: *** [dependencies] 错误 2

make[1]: Leaving directory `/usr/local/redis-2.2.7/src'

make: *** [all] 错误 2

 

只需要做如下的处理:

vi deps/hiredis/Makefile

Line 18:else ifeq ($(uname_S),Darwin)

modify:elif ifeq ($(uname_S),Darwin)

Redis 命令参考

进入 redis-cli

选择某个库 select  1

看有多少个key

keys *,

返回当前数据库的 key 的数量。

dbsize

flushdb 删除当前库

redis-cli -n 2 flushdb

-n 指定db序号的

flushall 删除所有库

monitor设置监听当前redis服务的所有操作

ping查看是否可以通

info 可以查看redis使用了多少内存

也记录了redis的版本号

/redis-cli info |grep memory

# Memory
used_memory:439304
used_memory_human:429.01K//一般会选择提取出used_memory_human的结果当内存
used_memory_rss:13897728
used_memory_peak:401776
used_memory_peak_human:392.36K
used_memory_lua:20480
mem_fragmentation_ratio:31.64
mem_allocator:jemalloc-3.0.0
# CPU
used_cpu_sys:0.03
used_cpu_user:0.01
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

redis默认最大连接数 10000

redis 127.0.0.1:6379> config get max*

5) "maxclients"

6) "10000"

 

redis-cli  --raw 中文输出

启动时如果输出

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

vi /etc/sysctl.conf
添加
net.core.somaxconn = 1024
然后
sysctl -p
生效
再次查看结果
cat /proc/sys/net/core/somaxconn
成功

启动时输出

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.

就按照提示来好了,那么,什么是Transparent Huge Pages(THP)透明大页,

把它关掉。问题在于THP如何转移内存以尝试保持或创建连续页面。一些应用程序可以忍受这一点,而大多数数据库则不能,并且它会导致间歇性的性能问题,有些则很糟糕。无论如何,这并不是Redis独有的。

对于您的应用程序,尤其是JAVA,请设置真实的HugePages并保留透明的种类。如果这样做,请确保为应用程序和Redis正确分配了内存。尽管不得不说,我可能不建议在同一实例/服务器/虚拟机上同时运行应用程序和Redis。

内存是由块管理,即众所周知的页面。超大页面是 2MB 和 1GB 大小的内存块。2MB 使用的页表可管理多 GB 内存,而 1GB 页是 TB 内存的最佳选择。红帽企业版 Linux 6 开始就采用了超大页面管理。

超大页面必须在引导时分配。它们也很难手动管理,且经常需要更改代码以便可以有效使用。因此红帽企业版 Linux 也部署了透明超大页面 (THP)。THP 是一个提取层,可自动创建、管理和使用超大页面的大多数方面。THP可以改进系统的性能。

开关文件

cat /sys/kernel/mm/transparent_hugepage/enabled

使用命令查看时,如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示(只在MADV_HUGEPAGE标志的VMA中使用THP)

存在问题

THP在有些应用场景会出现异常,因此oracle、mongodb、redis等服务都建议关闭这个特性,因为这个可能导致延迟和内存使用问题。

临时解决方法:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

RHEL/CentOS可以直接写到/etc/rc.local里面实现开始自动修改

总结

Transparent Huge Pages(THP)可以减少使用超大页面的复杂行,目前THP已在各种系统、配置、程序和负载中测试优化,可以改进大多数系统配置的性能。如果不是必要,或者已知存在问题的服务,还是建议开启来。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
23天前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
|
15天前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
37 5
Linux系统之安装OneNav个人书签管理器
|
17天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
39 5
Linux系统之安装Ward服务器监控工具
|
20天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
33 2
Linux系统之安装cook菜谱工具
|
22天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
77 4
Linux系统之Ubuntu安装cockpit管理工具
|
22天前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
48 1
Linux系统之Centos7安装cockpit图形管理界面
|
29天前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
92 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
9天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
12天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
35 2
|
13天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
24 3