Redis基础
1.redis安装
下载redis:https://redis.io/
需要gcc环境将下载的redis源码进行编译,没有gcc环境则需要先安装gcc环境(以root账户登录并且可以联网)
yum -y install gcc automake autoconf libtool make
将下载的redis解压到/opt目录下
tar -zxvf redis -5.0.8-tar.gz -C /opt
进入解压后的redis目录 ,执行make命令进行编译
cd /opt/redis-5.0.8
make
安装编译后的文件到指定目录(在/opt/redis -5.0.8目录下进行install)
make PREFIX=/usr/local/redis install
进入/usr/local/redis下的bin目录中,启动redis
服务端启动:./redis-server
客户端启动:./redis-cli
ctrl+c
可以退出客户端与服务端查看当前哪些redis启动
ps -ef | grep -i redis
2.redis的配置
- 进入/opt/redis目录下,将redis.conf复制到安装文件的目录下
cp redis.conf /usr/local/redis
- 详细配置
- daemonize no:redis默认不是以守护进程的方式运行,可以通过修改该配置,启用守护进程。
- 当redis以守护进程方式运行时,redis默认会把pid写入
/var/run/redis.pid
文件,可以通过pidfile指定pidfile/var/run/redis.pid
- 指定redis的监听端口,默认端口为6379,因为6379在手机按键上MERZ对应的号码
port 6379
- 绑定的主机地址
bind 127.0.0.1
- 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
- 指定日志记录级别,redis总共支持四个级别:
debug,verbose,notice,warning
,默认为verbose
loglevel verbose
- 日志记录方式,默认为标准输出,如果配置redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给
/dev/null
logfile stdout
- 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
databases 16
- 指定在多长时间内,有多少次更新操作,将数据同步到数据文件,可以多个条件配合
save <seconds> <changes>
redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒内有10个更改以及60秒内有10000个更改- 指定存储至本地数据库时是否压缩数据,默认为yes,redis采用LZF(压缩算法)压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变得巨大
rdbcompression yes
- 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
- 指定本地数据库存放目录
dir ./
- 设置当本机为slav服务时,设置master服务的ip地址及端口,在redis启动时,它会自动从master进行数据同步
slaveof <masterip> <masterport>
- 当master服务设置了密码保护时,slav服务连接master的密码
masterauth <master-password>
- 设置redis连接密码,如果配置了连接密码,客户端再连接redis时需要通过AUTH
<password>
命令提供密码,默认关闭
requirepass foobared
- 设置同一时间最大客户端连接数,默认无限制,redis可以同时打开的客户端连接数为redis进程可以打开的最大文件描述符数,如果设置
maxclients 0
,表示不作限制。当客户端连接数达到限制时,redis会关闭新的连接并向客户端返回max number of clients reached
错误信息
maxclients 128
- 指定redis最大内存限制,redis在启动时会把数据加载到内存中,达到臭内存后,redis会先尝试清除已到期或即将到期的key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。redis新的vm机制,会把key存放内存,value会存放在swap区
maxmemory <bytes>
- 指定是否在每次更新操作后进行日志记录,redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
- 指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly .aof
- 指定更新日志条件,共有三个可选值:
no
:表示等操作系统进行数据缓存同步到磁盘(快)
always
:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec
:表示每秒同步一次(折衷,默认值)
appendfsync everysec
3.redis中的内存维护策略
redis作为优秀的中间缓存件,时常会存储大量的数据,即使采取了集群部署来动态扩容,也应该即时的整理内存,维持系统性能。
1.在redis中有两种解决方案 为数据设置过期时间
expire key time
(以秒为单位)–最常用的方式
setex(String key,int seconds,String value)
–字符串独有的方式
- 除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间
- 如果没有设置时间,那缓存就是永不过期
- 如果设置了过期时间,之后又想让缓存永不过期,使用persist key
2.采用LRU算法动态将不用的数据删除
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据
volatile-lru
:设定超时时间的数据中,删除最不常用的数据allkeys-lru
:查询所有的key中最近最不常用的数据进行删除,这是应用最广泛的策略volatile-random
:在已设定了超时的数据中随机删除allkeys-random
:查询所有的key,之后随机删除volatile-ttl
:查询全部设定超时时间的数据,之后排序,将马上要过期的数据进行删除操作noeviction
:如果设置为该属性,则不会进行删除操作,如果内存溢出则报错返回volatile-lfu
:从所有配置了过期时间的键中驱逐使用频率最少的键allkeys-lfu
:从所有键中驱逐使用频率最少的键
4.自定义配置redis
修改redis.conf配置文件
- daemonize no 修改为daemonize yes 启动守护进程
- bind 127.0.0.1 注释掉,允许本机以外的机器访问redis服务
- requirepass 设置密码
修改配置后服务端启动:
./redis-server ./redis.conf
客户端启动:./redis-cli
5.redis的关闭
1.非正常关闭
查询redis进程id
PIDps -ef | grep -i redis
kill对查询的id进行强制关闭
kill -9 PID
2.正常关闭
关闭redis服务,通过客户端进行shutdown
如果redis设置了密码,需要先在客户端通过密码登录,再进行shutdown即可关闭服务端(这样会保存数据)
6.防火墙端口
查看已开启的端口
firewall -cmd --list-ports
开启端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
重启防火墙
firewall-cmd --reload
#重启
firewall systemctl stop firewalld.service
#停止
firewall systemctl disable firewalld.service
#禁止firewall卡机启动
7.docker安装redis
1.搜索redis
docker search redis
2.下载镜像
docker pull redis:5.0.7
3.创建并运行容器
docker run -d --name redis6379 -p 6379:6379 redis:5.0.7 --requirepass "password"
4.测试redis进入客户端
使用redis镜像执行redis-cli命令连接到刚启动的容器
docker exec -it redis-6379 redis-cli
//开启客户端功能
docker exec -it redis-6379 redis-cli -h 127.0.0.1 -p 6379 -a password
//进入客户端
8.redis命令
redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)以及zset(sorted set:有序集合)等
常用key命令**
keys *
:返回满足的所有键。可以模糊匹配 比如keys abc*
代表abc开头的key
exists key
:是否存在指定的key,存在返回1,不存在返回0
expire key second
:设置某个key的过期时间 单位为秒
del key
:删除某个key
ttl key
:查看剩余时间,当key不存在时,返回-2;存在但没有设置剩余生存时间时,返回-1,否则,以秒为单位,返回key的剩余生存时间
persist key
:取消过期时间
PEXPIRE key milliseconds
修改key的过期时间为毫秒
select
:选择数据库 数据库为0-15(默认一共16个数据库) 设计成多个数据库实际上是为了数据库安全和备份
move key dbindex
:将当前数据中的key转移到其他数据库
randomkey
:随机返回一个key
rename key key2
:重命名key
echo
:打印命令
dbsize
:查看数据库的key数量
info
:查看数据库信息
config get *
:实时传储收到的请求,返回相关的配置
flushdb
:清空当前数据库
flushall
:清空所有数据库
type key
:返回key所存储值的类型
redis命令参考手册:
java http://doc.redisfans.com/