Linux--Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: Linux--Redis

一,关系型数据库与非关系型数据库

       关系型数据库为了规范性,把数据分配成为最小的逻辑表来存储避免重复,获得精简的空间利用。 但是多个表之间的关系限制,多表管理就有点复杂。 当然精简的存储可以节约宝贵的数据存储,但是现在随着社会的发展,磁盘上付出的代价是微不足知道的。

       非关系型是平面数据集合中,数据经常可以重复,单个数据库很少被分开,而是存储成为一个整体,这种整块读取数据效率更高。

二,非关系型数据库产生的背景

1,high performance——对数据库高并发读写需求

2,huge Storage——对海量数据高效存储与访问需求

3,high scalability && high availability——对数据库高可扩展与高可用性需求


三,Redis简介

       Redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value(键值对)数据库,是目前分布式架构中不可或缺的一环。

       与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默认使用 0 库)。在同一个库中,key 是唯一存在的、不允许重复的,它就像一把“密钥”,只能打开一把“锁”。键值存储的本质就是使用 key 来标识 value,当想要检索 value 时,必须使用与 value 相对应的 key 进行查找。

Redis 具有以下特点:

Redis 不仅可以将数据完全保存在内存中,还可以通过磁盘实现数据的持久存储;

Redis 支持丰富的数据类型,包括 string、list、set、zset、hash 等多种数据类型,因此它也被称为“数据结构服务器”;

Redis 支持主从同步,即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;

Redis 支持多种编程语言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等语言。

Redis优点:

下面对 Redis 的优势进行了简单总结:

性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;

多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;

命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;

可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。

支持数据备份,即master-salve模式的数据备份

一,Redis安装部署

注:make prefix=安装路径 install

[root@localhost ~]# tar zxf /mnt/redis-3.2.9.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/redis-3.2.9/
[root@localhost redis-3.2.9]# make && make install

    make install 只有安装了二进制文件到系统,并没有启动脚本和配置文件。软件包中默认提供了一个install.server.sh脚本文件,通过该脚本文件可以设置Redis服务所需要的相关配置文件。

一直保持默认即可,回车,回车,回车

[root@localhost redis-3.2.9]# cd /usr/src/redis-3.2.9/utils/
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379                    #端口号
Config file    : /etc/redis/6379.conf    #设置默认设置文件
Log file       : /var/log/redis_6379.log #设置日志文件
Data dir       : /var/lib/redis/6379     #执行命令
Executable     : /usr/local/bin/redis-server    #客户端命令
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

 安装完成后,可以通过Redis的服务控制脚本/etc/init.d/redis_6379来对Redis服务进行控制,如停止Redis服务,启动Redis服务,重启Redis服务,查看Redis允许状态。

[root@localhost ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@localhost ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# /etc/init.d/redis_6379 status
Redis is running (4582)

   配置参数

[root@localhost ~]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.2.1    #监听的主机地址
port 6379                     #端口
daemonize yes                 #启动守护进程
pidfile /var/run/redis_6379.pid    #指定PID文件
loglevel notice                    #日志级别
logfile /var/log/redis_6379.log    #指定日志文件
[root@localhost ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
 1.

二,Redis命令工具

edis-server:用于启动Redis的工具

redis-benchmark:用于检测Redis的工具

redis-check-aof:修复AOF持久化文件

redis-check-rdb:修复RDB持久化文件

redis-cli:Redis命令行工具

redis-setinel:redis-server文件的软链接

1.redis-cli命令行工具

[root@localhost ~]# redis-cli    //连接本机上的Redis数据库
127.0.0.1:6379> ping             //检测Redis服务是否启动
PONG
127.0.0.1:6379> 

     指定远程主机上的Redis数据库,命令语法为Redis-cli -h host -p port -a password。-h指定远程主机,-p指定Redis服务的端口号,-a指定密码。若要退出数据库环境,执行exit或quit命令即可返回原来的Shell环境。

1. [root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379
2. 127.0.0.1:6379> exit

2.redis-benchmark测试工具

基本测试语法为 redis-benchmark [option] [option value]。

查用选项:

-h:指定服务器主机名

-p:指定服务器端口

-s:指定服务器socket

-c:指定并发连接数

-n:指定请求连接数

-d:以字节(B)的形式指定SET/GET值的数据大小

-k:1=keep alive 0=reconnect

-r:SET/GET/INCR使用随机key,SADD使用随机值

-P:通过管道传输<numreq>请求

-q:强制退出redis。仅显示query/sec 值

--cav:以CSV格式输出

-l:生成循环,永久执行测试

-t:仅运行以逗号分割的测试命令列表

-i:ldie模式。仅打开N个idle连接等待

可以针对某台Redis服务器进行性能检测,执行redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 命令即可向本机,端口为6379的Redis发送100个并发连接与100000个请求测试性能。

[root@localhost ~]# redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 1000000
====== PING_INLINE ======
  1000000 requests completed in 7.08 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

三,Redis数据库常用命令

set:存放数据,基本的命令格式为set key value

get:获取数据,基本的命令格式为get key

1. [root@localhost ~]# redis-cli
2. 127.0.0.1:6379> set teacher cjx
3. OK
4. 127.0.0.1:6379> get teacher
5. "cjx"

key相关命令

1. 127.0.0.1:6379> KEYS *
2. 1) "mylist"
3. 2) "counter:__rand_int__"
4. 3) "s2"
5. 4) "s3"
6. 5) "key:__rand_int__"
7. 6) "s1"
8. 7) "teacher"

xists:使用exists命令可以判断键值是否存在。integer 0 代表此键不存在

1. 127.0.0.1:6379> exists teacher
2. (integer) 1
3. 127.0.0.1:6379> exists fiush
4. (integer) 0

del:使用del命令可以删除当前数据库的指定key。integer 0 代表此键不存在

1. 127.0.0.1:6379> del s1
2. (integer) 1
3. 127.0.0.1:6379> del s6
4. (integer) 0

type:使用type命令可以获取key对应的value值类型。

1. 127.0.0.1:6379> type teacher
2. string

rename:rename命令是对key进行重命名,格式为“ rename  源key 目标key”。使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。

127.0.0.1:6379> keys *
1) "s2"
2) "s3"
3) "s1"
127.0.0.1:6379> rename s2 s22
OK
127.0.0.1:6379> keys *
1) "s22"
2) "s3"
3) "s1"
127.0.0.1:6379> rename s1 s3
OK
127.0.0.1:6379> keys *
1) "s3"
2) "s22"

renamenx命令的作用是对已有key进行重命名,并检测新名是否存在。使用renamenx命令进行重命名时,如果目标key存在则不进行重命名。

127.0.0.1:6379> renamenx s22 s2
(integer) 1
127.0.0.1:6379> keys *
1) "s2"
2) "s3"
127.0.0.1:6379> renamenx s3 s2
(integer) 0
127.0.0.1:6379> keys *
1) "s2"
2) "s3"

dbsize命令时查看当前数据库中key的数目

1. 127.0.0.1:6379> dbsize
2. (integer) 2

多数据库间切换


       Redis支持多数数据库,Redis在没有任何改动的情况下默认包含16个数据库,数据库名称是用数字0-15来依次命名的。使用select命令可以进行Redis的多数据之间的切换,命令格式为“ select index ”,其中index表示数据库的序号,而使用redis-cli连接redis数据库后,默认使用序号为0的数据库。

1. 127.0.0.1:6379> select 10
2. OK
3. 127.0.0.1:6379[10]> select 15
4. OK
5. 127.0.0.1:6379[15]> select 0
6. OK
7. 127.0.0.1:6379>

redis数据库提供了一个move命令,其可以进行多数据库的数据移动,命令的基本语法格式为“ move key dbindex ”。其中,key当前数据库的目标键,dbindex目标数据库的序号。具体操作如下。

127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> move k1 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
"100"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get k1
(nil)

清除数据库内数据

清空当前数据库的数据,使用flushdb命令实现。

清空所有数据库的数据,使用flushall命令实现。

四,Redis群集

Red群集原理:

Redis Cluster是一个无中心的结构。

1.架构细节

所有的redis节点彼此互联,内部使用二进制协议优化传输速度和带宽。

       节点的失效(fail)在群集中过半的主(master)节点检测失效时才生效。

       客户端与redis节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。

       redis-cluster 把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->key.

2.redis-cluster选举

       选举过程是群集中所有master参与,如果半数以上master节点与当前master节点通信超时(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTERDOWN The cluster is down)错误。

       如果群集任何master挂掉,且当前master没有slave,则群集进入fail状态,也可以理解为群集的slot映射[0-16383]不完整时进入fail状态。  

      如果群集中超过半数的master挂掉,无论是否有slave,群集都进入fail状态。

       默认情况下,每个群集的节点都使用两个TCP端口,一个是6379,一个是16379;6379服务于客户端的连接,16379用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测,配置更新,故障转移授权等。如果开启了防护墙,需要开放这两个端口。

da8591ac55b441e2bfbe9815219b8bed.png

1.安装redis并修改配置文件,将每一台redis服务器全部配置相同。

[root@node2 ~]# vim /etc/redis/6379.conf 
bind 192.168.2.1
daemonize yes
logfile /var/log/redis_6379.log
cluster-enabled yes                    #启动群集
cluster-config-file nodes-6379.conf    #群集配置文件
cluster-node-timeout 15000
cluster-require-full-coverage no
port 6379

2.重启redis服务即可。

1. [root@node2 ~]# /etc/init.d/redis_6379 restart
2. Stopping ...
3. Redis stopped
4. Starting Redis server...

3.选择其中一台redis服务器创建群集,需要先安装ruby的运行环境和ruby的Redis客户端。gem命令是提前下载的redis-3.2.0.gem软件包提供的。

1. [root@node2 ~]# yum install ruby rubygems -y
2. [root@node2 ~]# gem install redis --varsion 3.2.0

4.使用脚本创建群集。

[root@node2 ~]# cd /usr/src/redis-3.2.9/src/
[root@node2 src]# ./redis-trib.rb create --replicas 1 192.168.2.1:6379 192.168.2.2:6379 192.168.2.3:6379 192.168.2.4:6379 192.168.2.5:6379 192.168.2.6:6379

查看群集状态

[root@node2 src]# ./redis-trib.rb check 192.168.2.1:6379

    测试群集

注:-c来激活群集模式

[root@node2 ~]# redis-cli -h 192.168.2.1 -p 6379 -c
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
NoSQL Linux 测试技术
Redis的安装(Linux版)
Redis的安装(Linux版)
|
5月前
|
NoSQL Linux Redis
linux 安装redis
linux 安装redis
126 3
|
NoSQL 关系型数据库 MySQL
Linux系列——将Redis设置成为一个服务
Linux系列——将Redis设置成为一个服务
|
NoSQL Linux Shell
redis 在Linux下的安装与配置
redis 在Linux下的安装与配置
136 0
|
NoSQL Java Linux
Linux下安装redis
Linux下安装redis
189 0
Linux下安装redis
|
NoSQL Linux Redis
linux下redis的安装和配置
linux下redis的安装和配置
113 0
linux下redis的安装和配置
|
NoSQL Linux Redis
Redis在Linux下的使用命令
Redis在Linux下的使用命令
187 0
|
NoSQL Redis 数据安全/隐私保护
LINUX08_Redis6.0.9如何安装(上)
LINUX08_Redis6.0.9如何安装(上)
232 0
LINUX08_Redis6.0.9如何安装(上)
|
NoSQL 网络安全 Redis
LINUX08_Redis6.0.9如何安装(下)
LINUX08_Redis6.0.9如何安装(下)
105 0
LINUX08_Redis6.0.9如何安装(下)
|
NoSQL 测试技术 Linux
redis 系列1 linux下安装说明
原文:redis 系列1 linux下安装说明 一. 安装环境   操作系统:centos 7 ,redis版本4.06,客户端windows 7 ,vs2015。   1.1 安装前的条件 yum -y install gcc-c++         判断是否安装了gcc-c++ ,脚...
1023 0