1.Redis 简介
Redis 是 NoSQL数据库的一种,由 C 语言编写,开源免费,遵守BSD协议,一个高性能的key-value数据库。它支持的数据类型众多,包括:string、list、set、zset和hash。
Redis的服务器程序是单进程模式,那么问题来了,当多个客户端同时访问操作时,服务器的处理能力肯定就会有一定的下降,面对这种场景,我们可以考虑在同一台服务器上开启多个Redis进程,这种情况下Redis会对CPU存在竞争。
Redis 优点:
(1).内存使用方面极其“优异”
Redis 中的数据都是缓存在计算机的内存中,并且会周期性的把更新的数据写入到磁盘或把修改操作写入追加到记录文件
(2).数据读写快速高效
Redis能读的速度是110000次/s,写的速度是81000次/s 。
(3).持久化性能好
Redis 中支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用
(4).扩展性及移植性好
Redis 应用场景:缓存、排行榜类的应用、计数器应用、存储关系、实时分析系统、日志记录
2.Redis 安装
Redis 官网:https://redis.io/
目前redis的最新版本为4.0.1,下载及编译命令如下
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar -zxvf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make && make install PREFIX=/home/hadoop/redis
笔者在编译安装redis时,出现了两个错误,错误及解决方法如下
- 错误1
make[3]: 进入目录“/home/hadoop/redis-4.0.1/deps/hiredis”
gcc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
make[3]: gcc:命令未找到
make[3]: * [net.o] 错误 127
make[3]: 离开目录“/home/hadoop/redis-4.0.1/deps/hiredis”
make[2]: * [hiredis] 错误 2
make[2]: 离开目录“/home/hadoop/redis-4.0.1/deps”
make[1]: [persist-settings] 错误 2 (忽略)
CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: * [adlist.o] 错误 127
make[1]: 离开目录“/home/hadoop/redis-4.0.1/src”
make: * [all] 错误 2
错误原因:gcc命令没有找到,因为redis安装时需要gcc编译器,输入如下命令安装gcc
$ sudo yum install -y gcc g++ gcc-c++ make
- 错误2
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
错误原因:jemalloc重载了Linux下的ANSI C的malloc和free函数。解决办法:make时添加参数
$ make MALLOC=libc && make install PREFIX=/home/hadoop/redis
编译安装后,redis会生成一个bin目录,如果有该目录,说明redis安装成功,bin目录结构如下
$ cd redis
bin目录结构说明
redis-server: 用来启动Redis的工具
redis-benchmark: 用来检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化
redis-check-rdb:修复RDB持久化文件
redis-cli:命令行工具(redis客户端)
redis-sentinel: 软链接
想要使用redis,需要有一个redis的配置文件,redis解压后的目录中有一个redis.conf文件,它是redis的默认配置文件,拷贝该文件到bin目录下
$ cp redis.conf ~/redis/bin/
启动redis服务
$ ./redis-server redis.conf
redis默认读取的配置文件就是redis.conf,可以不用指定该文件
$ ./redis-server
启动完成后,可以看到redis的logo以及端口,端口默认为6379,可以在配置文件中修改
上图可以看到redis启动的方式是前台启动,所以这个窗口就不能在做其它操作了,可以在配置文件中修改daemoniz为yes,表示后台启动。
redis启动成功后,输入如下命令,进入redis的客户端
$ ./redis-cli
我们来使用redis做个小测试,使用set命令来存储数据,使用get获取数据
set hello "redis"
get hello
停止服务在客户端输入如下命令
shutdown
exit
3.redis 启动警告问题解决
redis 启动后,在日志信息中可以看到一些警告,警告及解决方法如下
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.
临时解决:sysctl vm.overcommit_memory=1
永久解决:将vm.overcommit_memory=1写入文件/etc/sysctl.conf中
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.
This will create latency and memory usage issues with Redis. To fix thisissue 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 thesetting after a reboot. Redis must be restarted after THP is disabled.
临时解决:echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久解决:将never写入文件/etc/rc.local中
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
永久解决:将511写入/proc/sys/net/core/somaxconn文件中