yum -y install gcc
tar -xf redis-4.0.8.tar.gz
cd redis-4.0.8
make && make install
]$ cd redis-4.0.8
]# ./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!
Starting Redis server... # 提示服务已经启动
Installation successful! # 提示安装成功
-------------------------------------------------------------------------------
端口:6379
主配置文件:/etc/redis/6379.conf
日志文件:/var/log/redis_6379.log
数据库目录:/var/lib/redis/6379
服务启动程序:/usr/local/bin/redis-server
命令行连接命令:/usr/local/bin/redis-cli
]$ /etc/init.d/redis_6379 start # 启服务
]$ /etc/init.d/redis_6379 stop # 停服务
]$ ps -C redis-server # 查看进程
]$ ss -atunp | grep 6379 # 查看端口
]# redis-cli
127.0.0.1:6379> ping # ping 结果为 PONG 则为正常。
PONG
> set key名 key值 # 存储1个值
> mset key名列表 # 存储多个
> get key名 # 获取key值
> mget key名列 # 获取多个值
> select [0~15] # 切换库。数据库编号0-15
> keys * # 查看所有变量
> keys a? # 显示指定key名
> exists key名 # 测试key名是否存在
> ttl key名 # 查看key生存时间
> type key名 # 查看key类型
> move key名 库编号 # 移动key到指定的库
> expire key名 数字 # 设置key有效时间
> del key名 # 删除指定的key
> flushall # 删除内存里所有key
> flushdb # 删除所在库的所有key
> save # 保存所有key到硬盘
> shutdown # 停止服务
]$ vim /etc/redis/6379.conf
‘此配置文件中,配置项目是有分类的:‘
#################### NETWORK ###################
名称 | 说明 |
---|---|
NETWORK | 网络 |
GENERAL | 常规 |
SNAPSHOTTING | 快照 |
REPLICATION | 复制 |
SECURITY | 安全 |
CLIENTS | 客户端 |
MEMORY MANAGEMENT | 内存管理 |
]$ vim /etc/redis/6379.conf
... ...
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.
]# vim /etc/redis/6379.conf
70 bind 127.0.0.1 # 连接IP
93 port 6379 # 端口
137 daemonize yes # 守护进程方式运行(即进程一直在运行在内存中)
172 logfile /var/log/redis_6379.log
187 databases 16 # 数据库个数
264 dir /var/lib/redis/6379 # 数据库目录
533 # maxclients 10000 # 并发连接数量
501 # requirepass foobared # 连接密码
]# vim /etc/redis/6379.conf
################## MEMORY MANAGEMENT #####################
‘清除策略‘
volatile-lru # 最近最少使用(针对设置了TTL的key)
allkeys-lru # 删除最少使用的key(针对所有key)
allkeys-lfu # 从所有key中清除使用频率最少的key
volatile-lfu # 从所有配置了过期时间的key中,清除使用频率最少的key
volatile-random # 在设置了TTL的key里随机移除
allkeys-random # 随机移除key
volatile-ttl(minor TTL) # 移除最近过期的key
noeviction # 不删除
‘优化设置‘
maxmemory # 最大内存
maxmemory-policy # 定义使用策略
maxmemory-samples # 选取key模板的个数(针对 lru 和 ttl 策略)
]# vim /etc/redis/6379.conf # 可更改连接IP、端口。启用密码
70 bind 192.168.4.50
93 port 6350
501 requirepass 123456
‘连接格式‘
]# redis-cli -h 主机地址 -p 端口 -a 密码
]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
‘注意:当端口改变后,就无法再使用脚本 停止服务。有2种方法‘
1.进入redis数据库后,使用shutdown命令。
]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> shutdown
2.修改脚本,在脚本中加入命令:
]# vim /etc/init.d/redis_6379
redis-cli -h 192.168.4.50 -p 6350 -a 123456 shutdown
]# yum -y install gcc pcre-devel zlib-devel # 安装依赖
]# tar -zxvf nginx-1.12.2.tar.gz # 解压
]# cd nginx-1.12.2 # 进源码目录
]# ./configure # 配置
]# make && make install # 编译安装
]$ yum -y install php-fpm php php-devel automake autoconf
]# tar -zxf php-redis-2.2.4.tar.gz # 安装扩展包,使php支持redis
]# cd phpredis-2.2.4/
]# phpize # 生成配置文件php-config及 configure命令
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
]# ./configure --with-php-config=/usr/bin/php-config # 配置
]# make
]# make install
]#vim /etc/php.ini
728 extension_dir = "/usr/lib64/php/modules/" # 模块文件目录
730 extension = "redis.so" # 模块文件名
:wq
]# systemctl restart php-fpm # 重启php-fpm服务
]# netstat -utnlp | grep :9000 # 查看端口
]# vim /usr/local/nginx/html/linkredis.php
<?php
$redis = new redis();
$redis->connect("192.168.4.50","6350");
$redis->auth("123456");
$redis->set("linux","redhat");
echo $redis->get("linux");
?>
]# curl http://localhost/linkredis.php # 访问nginx服务
redhat
~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 # 连接redis服务
192.168.4.50:6350> keys * //查看变量
1) "linux"
192.168.4.50:6350>
192.168.4.50:6350> get linux //获取值
"redhat"
192.168.4.50:6350>
管理主机,要从redis源码包中获取一个管理集群的ruby脚本。这是由redis开发者写好的。
]$ yum -y install ruby rubygems
ruby:用于解释ruby语言编写的脚本的解释器。
rubygems:提供命令gem。(相当于rpm,是用于安装gem文件的)
]$ gem install redis-3.2.1.gem # 此软件是用来给master提供连接redis服务的程序
]$ ls redis-4.0.8/src/
redis-trib.rb # 这就是管理集群的ruby脚本。
]$ echo $PATH
]$ mkdir /root/bin/
]$ cp redis-trib.rb /root/bin/ # 将脚本拷贝到PATH目录下,方便运行。
]# chmod +x /root/bin/redis-trib.rb
‘格式‘
]# redis-trib.rb 命令 选项 参数
命令 | 用法 |
---|---|
create | 创建集群 |
check | 检查集群 |
info | 查看集群 |
reshard | 重新分片 |
del-node | 删除主机 |
add-node | 添加 master 主机 |
add-node --slave | 添加 slave 主机 |
rebalance | 平均分配 hash slots |
> cluster info # 查看是否启用集群配置
cluster_state:fail # 集群状态
... ...
cluster_known_nodes:1 # 集群节点
cluster_size:0 # 集群主服务器
-------------------------------------------------------------------
‘修改配置启用集群功能‘
]# vim /etc/redis/6379.conf
815 cluster-enabled yes # 启用集群功能
823 cluster-config-file nodes-6379.conf # 存储集群信息文件
829 cluster-node-timeout 5000 # 连接超时
‘集群的端口=服务端口+10000‘
]# ss -atunp | grep redis
tcp 0 0 192.168.4.51:6351
tcp 0 0 192.168.4.51:16351
]$ redis-trib.rb create --replicas 1 > 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 > 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters: # 定义主服务器
192.168.4.51:6351
192.168.4.52:6352
192.168.4.53:6353
Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
... ....
[OK] All 16384 slots covered.
‘在管理主机上查看‘
]$ redis-trib.rb info IP:端口 # 查看集群信息
]$ redis-trib.rb check IP:端口 # 检查集群主机角色
‘在各个redis服务器上查看‘
> cluster info # 查看集群信息
> cluster nodes # 查看集群节点信息
~]$ ls /var/lib/redis/6379/ # 查看集群的文件
dump.rdb nodes-6379.conf
]$ redis-cli -c -h IP地址 -p 端口 # 必须要加选项-c。才能进入集群模式。
]$ redis-cli -c -h 192.168.4.51 -p 6351
‘格式‘
]$ redis-trib.rb add-node 添加的主机IP:端口 集群中任一主机IP:端口
‘重新分片‘
]$ redis-trib.rb reshard 集群中任一主机IP:端口
操作此分片命令后,会有3个步骤
1.确定透出的hash槽个数(需要手动计算出平均的值)
2.确定接收hash槽的主机ID(通过check命令查看)
3.移出hash槽的主机ID(一般选择all)
‘格式‘
]$ redis-trib.rb add-node --slave [--master-id ID值] > 添加的主机IP:端口 集群中任一主机IP:端口
‘[--master-id ID值] 这是用于指定master主机的。可不写。默认会把新节点添加到slave最少的主服务器上,或随机添加。‘
]$ redis-trib.rb del-node 移除主机IP:端口 移除主机的ID值
]$ redis-trib.rb del-node 192.168.4.59:6359 > 955fb03ceedbb5d82b1256536107140809eeb92d
‘格式‘
]$ redis-trib.rb reshard 移除主机IP:端口
]$ redis-trib.rb del-node 移除主机IP:端口 移除主机ID值
‘释放时的步骤‘
1.指定移出slots 个数
2.指定接收slots 主机ID
3.指定移出slots 主机ID
]$ redis-trib.rb rebalance IP:端口 # 将slots较多的主机的slots平均分配。
‘将被添加的主机‘
]$ /etc/init.d/redis_6379 start
]$ redis-cli -h 192.168.4.58 -p 6358
> cluster reset
‘管理主机‘
]$ redis-trib.rb add-node 192.168.4.58:6358 192.168.4.51:6351
]$ redis-cli -h IP -p 端口 shutdown
]$ rm -rf /var/lib/redis/6379/*
]$ vim /etc/redis/6379.conf # 注释掉集群开启
815 #cluster-enabled yes
823 #cluster-config-file nodes-6379.conf
829 #cluster-node-timeout 5000
]$ /etc/init.d/redis_6379 start
> info replcation # 查看复制信息
role:master # 角色
connected_slaves:1 # 连接的从服务器个数
slave0:ip=192.168.4.52,port=6352,state=online,offset=42,lag=1
‘基本格式‘
> slaveof 主IP 主端口 # 配置从,声明主。
> slaveof 192.168.4.51 6351
> slaveof no one # 反客为主。即取消slave。
‘以上命令行都为临时配置,永久配置应写入配置文件:‘
]# vim /etc/redis/6379.conf
282 slaveof 192.168.4.51 6351
‘配置master‘
]$ vim /etc/redis/6379.conf
501 requirepass 123456 # 设置连接密码
‘配置slave‘
]$ vim /etc/redis/6379.conf
282 slaveof 192.168.4.51 6351
289 masterauth 123456 # 主库密码
‘通过命令行也可设置永久配置‘
> config get masterauth # 查看配置变量
> config set masterauth 123456
> confgi rewrite # 将配置保存到配置文件中。
‘先安装Redis,但不用启用Redis,通过配置文件设置哨兵服务‘
]$ vim /etc/sentinel.conf # 手动创建写入。
bind 0.0.0.0
prot 26379
sentinel monitor server51 192.168.4.51 6351 1
sentinel auth-pass server51 123456
:wq
--------------------------------------
# sentinel monitor 主机名 IP 端口 票数
主机名:自定义
IP地址:master主机的IP
端 口:master主机redis服务的端口
票 数:发现主master宕机的哨兵服务器个数。
--------------------------------------
]$ redis-sentinel /etc/sentinel.conf # 启服务。
Redis数据库文件(Redis DataBase)
当没有做主从、也没有集群时。可将RDB文件进行备份后进行恢复数据。
RDB优点
高性能的持久化实现
主进程不做持久化,仍然接受客户端的读写操作
另外创建一个子进程来执行持久化,先将数据写入临时文件
持久化过程结束后,再用这个临时文件替换上次持久化好的文件
过程中主进程不做任何 IO 操作。
比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合。
RDB缺点:
‘RDB文件名‘
> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
]# vim /etc/redis/6379.conf
254 dbfilename dump.rdb
]# ls /var/lib/redis/6379/
dump.rdb
‘当服务停止时,就会将内存中的数据写入硬盘,即生成的文件dump.rdb(已有此文件,则将数据存入)。‘
‘数据从内存保存到硬盘的频率‘
]# vim /etc/redis/6379.conf
219 save 900 1 # 15分钟用有1个key改变
220 save 300 10 # 5分钟且有10个key改变
221 save 60 10000 # 1分钟且有10000个key改变
‘手动存盘‘
> save # 阻塞写存盘。(在存盘期间,无法访问内存,即无法读写)
> bgsave # 不阻塞写存盘。会单独生成一个进程,在后台进行存盘。
AOF:Append Only File
可以有效弥补RDB的不足,实际工作中,一般是两种同时使用。
优点:
缺点:
> config set appendonly yes # 启用AOF
> config rewrite # 写入配置文件
]# vim /etc/redis/6379.conf
673 appendonly yes
677 appendfilename "appendonly.aof" # 默认文件名
]$ vim /etc/redis/6379.conf
702 appendfsync always # 时时记录,并完成磁盘同步
703 appendfsync everysec # 每秒记录一次,并完成磁盘同步
704 appendfsync no # 写入AOF,不执行磁盘同步
appendonly.aof:记录的是操作命令
dump.rdb:存储实际的数据
‘日志重写:重写不是重新生成日志,而是将一些相同的命令合并,对日志进行瘦身‘
745 auto-aof-rewrite-min-size 64mb # 首次重写触发值
744 auto-aof-rewrite-percentage 100 # 当增长多少百分比时,再次重写。
`举例说明:当日志文件达到64mb时,进行瘦身,假设瘦身后大小为30mb,此后日志再次增长,增长数为原基础的100%时,即大小为60mb时,再次瘦身。`
‘修复AOF文件:把文件恢复到最后一次的正确操作(此功能不是任何时候都有效)‘
]$ redis-check-aof --fix /var/lib/redis/6379/appendonly.aof
> set key value [EX seconds] [PX milliseconds] [NX|XX]
EX:定义值的存储时间,秒
PX:定义值的存储时间,毫秒
NX:变量不存在则赋值
XX:变量存在才赋值(默认是这种)
# 例:
> set key value EX 15 # 存储时间15秒
> ttl key # 查看值生存时间
(integer) -2 # -2表示过期,-1表示永久存在。
> setrange key offset value # 从偏移量开始复写key的特定位的值(相当于替换)
# 例:
> set x ABCDEFG
> setrange x 3 ppp
(integer) 7
> get x
"ABCpppG"
> append key value # 追加,并显示长度。存在则追加,不存在则创建。
> strllen key # 只统计字串长度
> setbit key offset value # 对key所存储的字串,设置或清除特定偏移量上的位(bit)
> setbit key offset(位) [0|1] # value的值只能是1或0,offset在0~2^32 之间
> getbit key offset # 查看key中第几位的量
> bitcount key # 统计字串中被设置为1的比特位数量
> setbit x 0 1 # 0001
> setbit x 3 1 # 1001
> bitcount x # 结果为2
> decr key # 将key值减1,key不存在则初始化为0,再减1
> decrby key decrement # 将key值,减去decrement
> incr key # 将key值加1,key不存在则初始化为0,再加1
> incr key decrement # 将key值,增加decrement
> incrbyfloat key increment # 将key值加上浮点数增量increment。(加小数)
> getrange key start end # 截取key中的值,范围为start到end。
偏移量:从头数,以0开始计数;从末尾,以-1开始计数,-2表示倒数第二。
# 例:
> set x 0123456789
> getrange x 0 -1 # 显示全部(在未知有多少位时可使用)
"0123456789"
> getrange x 0 3
"0123"
> getrange x -3 -1
"789"
> lpush key value [...] # 将一个或多个值,插入到列表key 的表头。不存在则创建。
> lrange key start stop # 从开始start位置读取 key 的值到stop结束
> lpush list a b c d
> lrange list 0 -1 # 从0位开始,-1为末尾结束。先进后出
1) "d"
2) "c"
3) "b"
4) "a"
> lpop key # 可多次执行
> lpop list
"d"
> lrange list 0 -1
1) "c"
2) "b"
3) "a"
> llen key # 显示列表长度
> lindex key index # 显示列表中第index个的值
> lset key index value # 将key中第 index 个的值修改为 value
> rpush key value [...] # 将value插入到key列表的末尾。(可插入多个值)
# 例:
> lpush list a b c d
> llen list # 显示列表list长度
(integer) 4
> lindex list 3 # 显示列表中第3个的值
"a"
> lset list 0 test # 将第0个的值替换为test
OK
> lrange list 0 -1
1) "test"
2) "c"
3) "b"
4) "a"
> rpush list 1 2 3 # 在末尾插入值1 2 3 (先进后出)
(integer) 7
> lrange list 0 -1
1) "test"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
> rpop key
> rpop list # 删除列表list的末尾值
"3"
Redis hash
可理解为:就是一张表,key是表名,field是表字段,value是表内容。
> hset key field value # 设置
> hget key field # 获取
# 例:
> hset site bd baidu # 创建hash表,表名site,其中一个字段bd,存储值为baidu
> hget site bd # 获取site表中的bd值
"baidu"
> hmset key field value [field value...] # 同时给多个field赋值
> hmget key field [field...] # 同时获取多个field的值
> hdel key field [field...] # 删除表中多个field值,不存在则忽略。
> hmset site bd baidu gog google sl sina
> hkeys key # 显示表中所有的field名称
> hvals key # 显示表中所有的field的值
> hgetall key # 显示表中所有的field及值
192.168.4.50:6350> hkeys site
1) "bd"
2) "gog"
3) "sl"
192.168.4.50:6350> hvals site
1) "baidu"
2) "google"
3) "sina"
192.168.4.50:6350> hgetall site
1) "bd"
2) "baidu"
3) "gog"
4) "google"
5) "sl"
6) "sina"
原文:https://www.cnblogs.com/SHUN-The-Unique-Soul/p/14287287.html