Redis
Spring 集成 Reids(Spring-data-redis)
Redis 简介
Redis 是一个遵循 BSD 协议的开源高性能 key-value 数据库,不同于 mongoDB,Redis 的数据是存储在内存中的,数据的读写数据极快,广泛应用在各种 Web 应用作为数据缓存;
同时 Redis 还有以下特点:
- 支持数据持久化,可以将内存中的数据保存到磁盘中,重启的时候可以重新再次加载使用;
- 不仅仅支持 key-value 类型的数据,还支持堆 list,set,zset,hasn 等数据类型的储存;
- 支持数据备份(master-slave模式);
- 所有的操作都是原子的,同时还支持几个操作合并后原子执行;
Redis 官网:
https://redis.io
Redis 文档:
https://redis.io/documentation
Redis 中文社区文档:
http://www.redis.cn/documentation.html
Redis 安装配置
Redis 本身并不支持 window ,window 版本的 Redis 由微软开源团队维护,相关的说明见:
https://github.com/MicrosoftArchive/redis
在该页面下载的 Redis 需要使用 VS 进行编译,如果需要现成编译好的版本,见:
https://github.com/dmajkic/redis
以下介绍 Linux 下的安装配置:
编译安装方式
$ wget http://download.redis.io/releases/redis-4.0.8.tar.gz
$ tar xzf redis-4.0.8.tar.gz
$ cd redis-4.0.8
$ make
apt 安装方式(Ubuntu)
$ apt-get update
$ apt-get redis-server
安装后测试是否安装成功,进入到 redis 安装目录,以下命令启动 Redis:
$ redis-server # 启动 redis
$ redis-cli # 登陆 redis 终端
127.0.0.1:6397 > ping # 进行终端连接测试
pong
如果出现 Redis 的硬核方形大蛋糕(笑),并且 ping 指令执行后返回 pong,则安装成功,为了方便运行可以将 redis 安装目录写入到全局 PATH 变量中,或者将其注册为 server;
启动关闭 Redis
定位到 Redis 安装目录,如果是 apt 方式安装,可以通过
dpkg -L redis-server 获取相关信息;
1)启动Redis
$ redis-server # 以默认配置文件启动 redis
$ redis-server /etc/redis/redis.conf # 以指定配置文件启动 redis
2)关闭Redis
关闭 Redis 需要使用到 Redis 终端 redis-cli,定位到 Redis 安装目录:
$ redis-cli shutdown # 直接关闭 Redis,状态保存到持久化文件
$ redis-cli shutdown nosave # 直接关闭 Redis,不保存状态
# 或者登陆到 redis-cli 中操作
$ redis-cli
127.0.0.1:6379 > shutdown
※ 如果 redis 无法启动,修改 redis 配置文件,将 dir 参数修改为 redis 安装目录;
※ redis 如果不以 root 权限启动,在运行
redis-cli shutdown 指令时可能会抛出无法关闭的异常,这是由于没有足够的状态文件写入权限照成的,解决方法有以下 3 种:
- 直接以 root 权限启动 redis,以 root 权限关闭 redis;
- 非 root 权限下以不保存状态关闭 redis (redis-cli shutdown nosave );
- 非 root 权限下修改 redis 的配置文件中的 pidfile,logfile 参数的文件的权限,使得 redis 拥有相关的读写权限;
如果是在远程 redis 服务上执行命名,只需要指定相关连接参数即可,如下:
$ redis-cli -h host -p port -a password
Redis 配置参数
修改 Redis 的配置参数以下 2 种方法:
1)修改配置文件
redis 默认配置文件位于 redis安装目录下的 redis.conf ,可以直接通过 vim 修改文件;
2)直接在 redis-cli 终端修改
$ redis-cli
127.0.0.1:6379 > config get * # 获取所有配置参数
127.0.0.1:6379 > config get conf_name # 获取指定配置参数
127.0.0.1:6379 > config set conf_name new_value # 修改指定配置参数
配置参数说明
include /path/to/local.conf # 指定包含其它的配置文件
daemonize no # 设置 Redis 是否以后台进程(守护进程)运行
pidfile /var/run/redis.pid # 当以守护进程方式运行时,Redis默认会把 pid 写入该参数指定的文件
port 6379 # 监听端口,据说该默认端口 6379 对应手机上号码的 MERZ (意大利歌女 Alessia Merz)
bind 127.0.0.1 # 绑定的主机地址
loglevel notice # 指定日志记录级别,共支持四个级别:debug、verbose、notice、warning,
logfile stdout # 日志记录方式,默认 stdout (标准输出)
dbfilename dump.rdb # 指定本地数据库文件名
dir ./ # 指定本地数据库存放目录
databases 16 # 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
save 900 1 # 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,参数格式 <seconds><option_count>
save 300 10
save 60 10000
rdbcompression yes # 指定存储至本地数据库时是否压缩数据, Redis采用LZF压缩;
# 如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
appendonly no # 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘;
# 如果不开启,可能会在断电时导致一段时间内的数据丢失。
# 因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename appendonly.aof # 指定更新日志文件名
appendfsync everysec # 指定日志更新操作,有以下 3 种方式:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
requirepass foobared # 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过 AUTH <password> 命令提供密码
timeout 300 # 当客户端闲置多久后关闭连接,0 表示无限
maxclients 128 # 设置同一时间最大客户端连接数,0 表示无限
slaveof <masterip> <masterport> # 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
masterauth <master-password> # 当master服务设置了密码保护时,slav服务连接master的密码
maxmemory <bytes> # 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中;
# 达到最大内存后,Redis会先尝试清除已到期或即将到期的Key;
# 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
vm-enabled no # 指定是否启用虚拟内存机制,默认值为no
# VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中;
vm-max-memory 0 # 将所有大于vm-max-memory的数据存入虚拟内存
vm-swap-file /tmp/redis.swap # 虚拟内存文件路径,不可多个Redis实例共享
vm-page-size 32 # 虚拟内存的分页大大小,单位 byte
vm-pages 134217728 # 设置swap文件中的page数量,在磁盘上每8个pages将消耗1byte的内存
vm-max-threads 4 # 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的
glueoutputbuf yes # 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
activerehashing yes # 指定是否激活重置哈希,默认为开启
hash-max-zipmap-entries 64 # 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-value 512