二、Redis介绍及安装

一、   企业级缓存中间件Redis

Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品。Redis采用内存(In-Memory)数据集(DataSet) 。支持多种数据类型。运行于大多数POSIX系统,如Linux、*BSD、OSX等。

 

1、   软件特性

透明性:分布式系统对用户来说是透明的,一个分布式系统在用户面前的表现就像一个传统的单处理机分时系统,可让用户不必了解内部结构就可以使用。

 

扩展性:分布式系统的最大特点就是可扩展性,他可以根据需求的增加而扩展,可以通过横向扩展使集群的整体性能得到线性提升,也可以通过纵向扩展单台服务器的性能使服务器集群的性能得到提升。

 

可靠性:分布式系统不允许单点失效的问题存在,它的基本思想是:如果一台服务器坏了,其他服务器接替它的工作,具有持续服务的特性。

 

高性能:高性能是人们设计分布式系统的一个初衷,如果建立了一个透明,灵活,可靠的分布式系统,但他运行起来像蜗牛一样慢,那这个系统就是失败的。

 

2、   Redis的常用功能

  1. 高速读写:Redis在运行时,将数据放在内存当中,利用内存的高性能的特性提高自己的服务性能。
  2. 数据类型丰富:Redis具有丰富的数据类型,可以适用于各种场景。
  3. 支持持久化:因为Redis的数据是放在内存当中的,当Redis关机或者内存失效时,数据随即丢失,不可找回,为了避免Redis重启时发生类似于雪崩事件,所以Redis官方增加了一个数据持久化的功能。
  4. 多种内存分配及回收策略:Redis可以通过 maxmemory 参数来限制最大可用内存,主要为了避免Redis内存超过操作系统内存,从而导致服务器响应变慢甚至死机的情况。而回收策略主要是删除过期的key以及内存达到 maxmemory 后的淘汰机制。
  5. 支持事物:Redis也支持类似于MySQL数据库那样的事务。
  6. 消息队列、消息订阅: Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先队列。同时在更高层面上,Redis还支持"发布/订阅"的消息模式,可以基于此构建一个聊天系统。
  7. 支持高可用:Redis支持两种高可用集群方式。

 

3、   Redis简单安装

3.1、  下载并安装

下载Redis可以去Redis官网获取源码包,下载到服务器上编译。Redis官网(https://redis.io/)。进入下载页面(https://redis.io/download),从左到右分别是最新版、最新稳定版和容器版,我们可以下载最新稳定版的源码包(https://download.redis.io/releases/redis-6.0.9.tar.gz)。

 

# 下载

## 官网:https://redis.io/

## 下载链接:https://download.redis.io/releases/redis-6.0.9.tar.gz

[root@instance-gvpb80ao~]# wget https://download.redis.io/releases/redis-6.0.9.tar.gz

--2020-11-08 12:42:21--  https://download.redis.io/releases/redis-6.0.9.tar.gz

Resolving download.redis.io (download.redis.io)... 45.60.125.1

Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 2261418 (2.2M) [application/octet-stream]

Saving to: 'redis-6.0.9.tar.gz'

 

redis-6.0.9.tar.gz    100%[=========================>]   2.16M  30.2KB/s    in 91s

 

2020-11-08 12:44:00 (24.4 KB/s) - 'redis-6.0.9.tar.gz' saved [2261418/2261418]

3.2、  编译安装

因为Redis是跨平台的缓存服务器,所以在不同的平台上安装各异。一般情况下我们需要下载源码包带主机上,然后解压并编译,从而得到redis-server启动文件。

# 解压

## 将源码包解压至/usr/local目录

[root@instance-gvpb80ao ~]# tar -xf redis-6.0.9.tar.gz -C /usr/local/

[root@instance-gvpb80ao ~]# cd /usr/local/redis-6.0.9/

 

# 编译

## 在Linux中编译软件需要安装gcc gcc-c++ make等如软件。

[root@instance-gvpb80ao redis-6.0.9]# yum -y install centos-release-scl

[root@instance-gvpb80ao redis-6.0.9]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

 

## devtoolset-8-toolchain

## scl enable devtoolset-8 bash

 

[root@instance-gvpb80ao redis-6.0.9]# scl enable devtoolset-9 bash

 

# 遇到的问题1

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory

cc: error: ../deps/lua/src/liblua.a: No such file or directory

make[1]: *** [redis-server] Error 1

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

 

## 解决办法

### 进入源码包目录下的deps目录中执行:make lua hiredis linenoise

 

# 遇到问题2

redis编译报错cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory

 

make MALLOC=libc 加参数重新编译

 

 

## -j参数是使用多核编译

[root@instance-gvpb80ao redis-6.0.9]# make -j

cd src && make all

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

CC Makefile.dep

... 此处略去许多行

[root@alvin-test-os redis-6.0.9]# make PREFIX=/usr/local/redis install

cd src && make install

make[1]: 进入目录“/opt/redis-6.0.9/src”

 

Hint: It's a good idea to run 'make test' ;)

 

    INSTALL install

    INSTALL install

    INSTALL install

    INSTALL install

    INSTALL install

make[1]: 离开目录“/opt/redis-6.0.9/src”

[root@alvin-test-os redis]# ll /usr/local/redis/

总用量 0

drwxr-xr-x. 2 root root 134 11月 20 16:21 bin

 

# 复制配置文件

[root@alvin-test-os opt]# cp /opt/redis-6.0.9/redis.conf /usr/local/redis/etc/

 

# 修改配置

将daemonize no 修改成 daemonize yes

3.3、  注册Redis服务

[root@alvin-test-os opt]# cat > /usr/lib/systemd/system/redis.service << EOF

[Unit]

Description=Redis

After=network.target

 

[Service]

Type=forking

PIDFile=/var/run/redis_6379.pid

ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

EOF

 

# 启动服务

[root@alvin-test-os etc]# systemctl start redis

[root@alvin-test-os etc]# systemctl status redis.service

● redis.service - Redis

   Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)

   Active: active (running) since 五 2020-11-20 16:51:59 CST; 2s ago

  Process: 1365 ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (code=exited, status=0/SUCCESS)

 Main PID: 1366 (redis-server)

    Tasks: 5

   Memory: 6.4M

   CGroup: /system.slice/redis.service

           └─1366 /usr/local/redis/bin/redis-server 127.0.0.1:6379

 

11月 20 16:51:59 alvin-test-os systemd[1]: Starting Redis...

11月 20 16:51:59 alvin-test-os systemd[1]: Can't open PID file /var/run/redis_6379.pid (yet?) after start: No such file or directory

11月 20 16:51:59 alvin-test-os systemd[1]: Started Redis.

3.4、  测试连接

# Redis根目录下入环境变量

[root@alvin-test-os redis]# cat ~/.bash_profile

PATH=$PATH:$HOME/bin

export PATH

REDIS_HOME=/usr/local/redis

PATH=$PATH:$REDIS_HOME/bin

export PATH

 

[root@alvin-test-os redis]# redis-cli -h 127.0.0.1

127.0.0.1:6379> set a b

OK

127.0.0.1:6379> get a

"b"

127.0.0.1:6379>

posted @ 2020-12-17 19:32  行哥  阅读(191)  评论(0)    收藏  举报