Redis是一个开源,内存数据结构存储,用作数据库,缓存和消息代理。 它支持数据结构,例如字符串,散列,列表,集合,具有范围查询的排序集,位图,超文本和具有半径查询的地理空间索引。Redis内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性,并通过Redis Cluster进行自动分区。
Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,setzset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
-
redis的安装
首先下载安装包redis-4.0.1.tar.gz 把它进行解压,并且编译安装
root@cuidan-To-be-filled-by-O-E-M:/mnt# tar zxf redis-4.0.1
root@cuidan-To-be-filled-by-O-E-M:/mnt/redis-4.0.1# ls
00-RELEASENOTES deps Makefile redis_stdout.log sentinel.conf
BUGS dump.rdb MANIFESTO runtest src
CONTRIBUTING INSTALL README.md runtest-cluster tests
COPYING log redis.conf runtest-sentinel utils
root@cuidan-To-be-filled-by-O-E-M:/mnt/redis-4.0.1# make
然后启动。
root@cuidan-To-be-filled-by-O-E-M:/mnt/redis-4.0.1# src/redis-server
服务器部署好了,我们要检测他是否是ok的 查看他的端口 查看他的进程检测其是否可以通信
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# ss -antlp | grep 6379
LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=19232,fd=7))
LISTEN 0 128 :::6379 :::* users:(("redis-server",pid=19232,fd=6))
查看端口
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# ps auxf | grep -i redis
root 19488 0.0 0.0 15984 940 pts/8 S+ 17:08 0:00 | | \_ grep --color=auto -i redis root 19232 0.0 0.1 46492 9180 pts/13 Sl+ 17:01 0:00 | \_ src/redis-server *:6379
检测是否通信
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.0.0.1. Escape character is '^]'.
123
-ERR unknown command '123'
456
-ERR unknown command '456'
q
-ERR unknown command 'q'
quit
+OK Connection closed by foreign host
redis部署的没问题,现在我们就要考虑他的安全性问题 我们要修改redis.conf的配置文件将他的公网ip地址改为私有ip地址,这样只有我们自己可以访问。
bind 192.168.1.100 10.0.0.1 ipv4 的地址
bind 127.0.0.1 ::1 ipv6的地址
我们还可以通过加密的方式来增加它的安全。 用stunnel来对它加密 Stunnel是一种代理,旨在向现有客户端和服务器添加TLS加密功能,而无需对程序代码进行任何更改。 其架构针对安全性,可移植性和可扩展性(包括负载平衡)进行了优化,使其适合大型部署。Stunnel使用OpenSSL库进行加密,因此它支持将任何加密算法编译到库中。
root@cuidan-To-be-filled-by-O-E-M:/etc/stunnel# vim /etc/default/stunnel4
ENABLED=1
在ubuntu里边首先要安装stunnel服务。
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# apt-get install stunnel4
创建自己用的私钥
root@cuidan-To-be-filled-by-O-E-M:/home/cuidan# openssl gensra -out /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 1826
将两个组合起来组成一个私钥
root@cuidan-To-be-filled-by-O-E-M:/etc/default# cat /etc/stunnel/key.pem /etc/stunnel/cert.pem > /etc/stunnel/private.pem
编辑自己的证书
root@cuidan-To-be-filled-by-O-E-M:/etc/default# openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 1826
设置权限
root@cuidan-To-be-filled-by-O-E-M:/etc/default# chmod 640 /etc/stunnel/key.pem /etc/stunnel/cert.pem /etc/stunnel/private.pem
编辑redis-server.conf的文件
cert = /etc/stunnel/private.pem
pid = /var/run/stunnel.pid
[redis]
accept = 10.0.4.47:6379
connect = 127.0.0.1:6379
然后在客户端也同样安装stunnel
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# apt-get install stunnel4
root@client:~# scp root@10.0.3.65:/etc/stunnel/private.pem /etc/stunnel/
root@client:~# chmod 640 /etc/stunnel/private.pem
编辑redis-client.conf
cert = /etc/stunnel/private.pem
client = yes
pid = /var/run/stunnel.pid
[redis]
accept = 127.0.0.1:6379
connect = 10.0.4.47:6379
然后重启stunnel4并且测试
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# /etc/init.d/stunnel4 restart
-
supervisod的安装
下边我们安装supervisor来托管redis
root@cuidan-To-be-filled-by-O-E-M:/etc/stunnel# apt-get install superviso
编辑配置文件
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor# vim supervisord.conf
[inet_http_server]
port=127.0.0.1:9001
username=user
password=123
编辑配置文件
root@cuidan-To-be-filled-by-O-E-M:/etc/supervisor/conf.d# vim redis.conf
[program:redis]
command = /mnt/redis-4.0.1/src/redis-server /mnt/redis-4.0.1/redis.conf
autostart = true
autorestart = true
startsecs = 10
startretries = 3
redirect_stderr = true
#stdout_logfile_maxbytes = 30M
stdout_logfile_backups = 20
stdout_logfile = /mnt/redis-4.0.1/log/redis_stdout.log
最后:感谢运维部妹子投稿

所有用户赞赏通道:

