Redis的安装和部署
基本知识
1、Redis的数据类型:
字符串、列表(lists)、集合(sets)、有序集合(sorts sets)、哈希表(hashs)
2、Redis和memcache相比的独特之处:
(1)redis可以用来做存储(storge)、而memcache是来做缓存(cache)。这个特点主要是因为其有“持久化”功能
(2)存储的数据有“结构”,对于memcache来说,存储的数据,只有一种类型——“字符串”,而redis则可以存储字符串、链表、集合、有序集合、哈序结构
3、持久化的两种方式:
Redis将数据存储于内存中,或被配置为使用虚拟内存。
实现数据持久化的两种方式:(1)使用截图的方式,将内存中的数据不断写入磁盘(性能高,但可能会引起一定程度的数据丢失)
(2)使用类似mysql的方式,记录每次更新的日志
4、Redis的主从同步:对提高读取性能非常有益
5、Redis服务端的默认端口是6379
接下来我们来安装Redis
1、先到Redis官网(redis.io)下载redis安装包
2.加下载下来的压缩包解压,并将解压出来的文件放入/usr/local文件夹下。(系统目录可能需要鉴定)
- 解压:
tar zxvf redis-4.0.11.tar.gz
- 移动到:
mv redis-4.0.11 /usr/local/
3.切换到我们拖拽的文件下然后进行编译测试,编译安装
- 切换到:
cd /usr/local/redis-4.0.11/
- 编译测试
sudo make test
- 编译安装
sudo make install
redis 的启动与停止
redis-server
和 redis-cli
位于 redis-4.0.11/src
目录下 (这里我是首先打开这个目录(/usr/local/redis-4.0.11
)下进行的,也可以直接进行具体的目录文件)(如果看到别的安装环境有bin、etc等文件夹的路径出现的,不要着急后面会讲,这里先一步步从基本开始)
- 启动:启动 Redis 并加载配置文件:./src/redis-server(这里有一个空格) ./
redis.conf
成功之后可看到类似如下的终端样式:
- 打开redis客户端
redis-cli
;如果有密码,可使用auth yourpassword
做简单的密码登录 - 关闭方式一:在客户端执行
SHUTDOWN
可关闭 redis 服务 - 如果关闭不了就加一个参数,执行
SHUTDOWN NOSAVE
可关闭 redis 服务 - 关闭方式二:如果用了zsh,可以执行
kill redis
并按tab
,结束 redis 进程,也可在活动监视器里结束掉进程。
3.配置(关闭以上终端,另开一个终端界面)
在redis目录下建立bin,etc,db三个目录
sudo mkdir /usr/local/redis-3.2.8/bin
sudo mkdir /usr/local/redis-3.2.8/etc
sudo mkdir /usr/local/redis-3.2.8/db
把/usr/local/redis/src目录下的mkreleasehdr.sh,redis-benchmark, redis-check-rdb, redis-cli, redis-server拷贝到bin目录
cp /usr/local/redis-3.2.8/src/mkreleasehdr.sh .
cp /usr/local/redis-3.2.8/src/redis-benchmark .
cp /usr/local/redis-3.2.8/src/redis-check-rdb .
cp /usr/local/redis-3.2.8/src/redis-cli .
cp /usr/local/redis-3.2.8/src/redis-server .
拷贝 redis.conf 到 /usr/local/redis/etc下
cp /usr/local/redis-3.2.8/redis.conf /usr/local/redis-3.2.8/etc
修改redis.conf( vim /usr/local/redis-4.0.11/redis.conf)
#修改为守护模式(改成yes将会在开启redis的终端界面关闭后台情况下仍能够使用)
daemonize yes
#设置进程锁文件
pidfile /usr/local/redis-3.2.8/redis.pid
#端口
port 6379
#客户端超时时间
timeout 300
#日志级别
loglevel debug
#日志文件位置
logfile /usr/local/redis-3.2.8/log-redis.log
#设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
databases 16
##指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
#save <seconds> <changes>
#Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
#指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,
#可以关闭该#选项,但会导致数据库文件变的巨大
rdbcompression yes
#指定本地数据库文件名
dbfilename dump.rdb
#指定本地数据库路径
dir /usr/local/redis-3.2.8/db/
#指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能
#会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有
#的数据会在一段时间内只存在于内存中
appendonly no
#指定更新日志条件,共有3个可选值:
#no:表示等操作系统进行数据缓存同步到磁盘(快)
#always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
#everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
Redis的配置
daemonize:如需要在后台运行,把该项的值改为yes
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
port:监听端口,默认为6379
timeout:设置客户端连接时的超时时间,单位为秒
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
database:设置数据库的个数,默认使用的数据库是0
save:设置redis进行数据库镜像的频率
rdbcompression:在进行镜像备份时,是否进行压缩
dbfilename:镜像备份文件的文件名
dir:数据库镜像备份的文件放置的路径
slaveof:设置该数据库为其他数据库的从数据库
masterauth:当主数据库连接需要密码验证时,在这里设定
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
maxclients:限制同时连接的客户端数量
maxmemory:设置redis能够使用的最大内存
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
appendfsync:设置appendonly.aof文件进行同步的频率
vm_enabled:是否开启虚拟内存支持
vm_swap_file:设置虚拟内存的交换文件的路径
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
vm_page_size:设置虚拟内存页的大小
vm_pages:设置交换文件的总的page数量
vm_max_thrrads:设置vm IO同时使用的线程数量
之后我们再次启动服务的话就可以使用以下终端代码启动redis服务
./bin/redis-server etc/redis.conf
查看日志
tail -f log-redis.log
打开redis客户端
./bin/redis-cli
客户端常用命令:
命令 | 用途 |
---|---|
set key value | 设置 key 的值 |
get key | 获取 key 的值 |
exists key | 查看此 key 是否存在 |
keys * | 查看所有的 key |
flushall | 消除所有的 key |
Redis 密码设置和查看密码
redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证。
1、初始化Redis密码:
在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数;
比如 requirepass test123;
(Ps:需重启Redis才能生效)
redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);
2、不重启Redis设置密码:
在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。
redis 127.0.0.1:6379> config set requirepass test123
查询密码:
redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted
密码验证:
redis 127.0.0.1:6379> auth test123
OK
再次查询:
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"
PS:如果配置文件中没添加密码 那么redis重启后,密码失效;
3、登陆有密码的Redis:
在登录的时候的时候输入密码:
redis-cli -p 6379 -a test123
先登陆后验证:
redis-cli -p 6379
redis 127.0.0.1:6379> auth test123
OK
AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;
认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。
总结:
- 默认启动
使用命令redis-cli启动客户端,按照默认配置连接Redis(127.0.0.1:6379)。 - 指定地址和端口号
使用命令 redis-cli -h 127.0.0.1 -p 6379
打开redis目录文件地址:cd /usr/local/redis-4.0.11
开启redis环境服务:./bin/redis-server ./etc/redis.conf
打开redis客户端:./bin/redis-cli
然后使用语句:keys * ( 获取所有的redis缓存中的key内容)
set 123 567 (set方法设置key和对应的value)
get 123 (获取key为123的对应的value内容)
DEL 123 (删除key为123的key和value所有内容,返回的是删除key的数量)
//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall
(其他的一些命令参考链接:http://doc.redisfans.com)
shutdown nosave(save),关闭redis服务。(shuntdown 默认是save,如果save关闭不了查看redis-log提示db文件夹权限不够,那么就去把这个文件夹选中command+i展示详情,在详情底部有权限一栏,将权限打开即可)
exit (或者quit)退出redis客户端,进入普通终端可输入状态。