Redis
简介
Redis是一个开源的基于C语言开发的内存数据结构存储,用作数据库缓存,通常缓存高频读数据(用户验证信息token、验证码)
Redis是一key-value存储系统,支持的数据类型包括String、List、Set、Hash等
redis是内存数据库,数据保存在内存中,传统数据库数据是保存在磁盘中,磁盘比较慢,内存比较快,只要内存没有被清空,数据永远存在
优点
Redis是当前最热门的NO-SQL系统之一
Redis提供了多种语言的API
性能非常高、单节点TPS可达10w
支持持久化
Redis存储速度快的原因
纯内存操作
服务端单线程模型
基于epoll的非阻塞网络通讯模型
Redis应用场景
1、缓存 2、消息队列,例如支付 3、活动排行榜或计数
4、发布,订阅消息 5、商品列表,评论列表等 6、有效期控制
Redis库
redis一共16个库,切换库的命令:select 1
Redis客户端
Redis-Destktop-Manager:Redis提供的Windows下可视化的客户端管理工具。
Jedis Client是Redis官网推荐的一个面向java客户端,它实现了对redis各类API进行封装调用。
Jmeter可以通过插件实现Redis数据的读取和修改。
Redis安装
Linux下安装步骤
下载源码安装包地址:redis安装包下载
Yum 官方源里没有 redis,所以采用手动源码安装
1、 上传 redis 安装包到 Linux 任意目录下,解压 tar xvf redis-5.0.7.tar.gz
2、 安装 gcc(redis 安装依赖 C 语言环境,需要先安装 gcc)
yum install -y gcc
3、 进入解压后的 redis 目录下,执行编译操作
make MALLOC=libc
4、 执行安装命令
make install
5、 安装成功
注意:执行编译命令时如出现以下错误,原因:系统无gcc环境
make[3]: gcc:命令未找到
make[3]: *** [net.o] 错误 127
make[3]: 离开目录“/usr/local/redis-4.0.6/deps/hiredis”
make[2]: *** [hiredis] 错误 2
make[2]: 离开目录“/usr/local/redis-4.0.6/deps”
make[1]: [persist-settings] 错误 2 (忽略)
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/usr/local/redis-4.0.6/src”
make: *** [all] 错误 2
[root@bogon redis-4.0.6]# yum install gcc-c++ yum安装gcc
[root@bogon redis-4.0.6]# make distclean 清空上次编译失败残留文件
[root@bogon redis-4.0.6]# make && make install 执行编译及安装
Windows下安装
1、下载安装包:Redis 安装文件地址(64bits)
2、双击安装包,一路下一步
3、配置redis环境变量
4、安装完成 redis 会自动启动,可以通过 netstat -ano|findstr 6379 进行端口检查,如果该端口已经被占用,说明 redis 已经启动。如果未占用说明未启动,则需要用过命令启动redis,命令行输入 redis-server
Redis配置
Redis的配置文件为redis.conf
修改daemonize yes 是否后台启动,默认为no
Redis启动
Redis分为server端和client端
server启动(在conf目录下执行):redis-server ./redis.conf
使用命令查看是否启动成功:netstat -lntp|grep 6379
server端启动成功后,使用redis-cli连接redis-server
redis-cli -p port(端口号)
redis-cli -h host -p port -a password
host:远程redis服务器host
port:远程redis服务端口
password:远程redis服务密码
Redis持久化
◼ 持久化是指将redis的内存数据存储到物理磁盘上,提高数据安全性
◼ 两种持久化方式
◼ rdb:在指定的时间间隔内将内存中的数据集快照写入磁盘,该方式存在磁盘中的是数据(6379.rdb)
◼ 优点:性能最大化 、如果数据集很大,RDB的启动效率会更高
◼ 缺点:数据安全性差
◼ aof:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,该方式存储的是日志(6379.aof)
◼ 优点:数据安全性高
◼ 缺点:对于相同数量的数据集而言,AOF文件通常要大于RDB文件。恢复数据慢
redis默认的持久化方式是rdb,数据存在dir的配置项中,./代表当前目录,即与配置文件相同的目录下
rdb的保存设置项
若使用aof持久化机制,将rdb的save设置项注释,同时修改appendonly设置项
Redis多实例部署
◼ 由于redis服务端是单线程实现的,因此只能占用CPU的单核,为了充分利用CPU资源,可以在一台服务器上同时启动多个redis-server实例
◼ 配置方法:
◼ 每个实例创建一个conf文件
◼ 修改每个conf文件中的端口号,修改port配置项,port 6380
◼ 启动不同实例时指定不同的配置文件
Redis 主从关系配置
在从 redis 中,新增 slaveof 127.0.0.1 6379,指向主 redis 的 ip 和端口
写数据只能在主redis操作,从redis只能读
应用场景:读写分离、从redis作为备份库
Redis 其他配置
maxclient:最大连接数,默认是 10000
maxmemory:最大内存
requirepass:设置密码
如果主redis设置了密码,需要在从redis的配置文件中设置masterauth 388712sun
Jedis 对Redis操作
public class RedisUtil {
public static String getValue(String ip,String key) {
Jedis jedis=new Jedis(ip);
return jedis.get(key);
}
public static void main(String[] args) {
Jedis jedis=new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
jedis.append("username", "张三"); //向redis存数据
jedis.mset("username", "xfsun"); //修改数据
System.out.println(jedis.get("username"));
jedis.close();
}
}
Redis的常用命令
查看redis一共多少数据:dbsize
查看redis的所有key:keys *
对String数据类型的操作
set key value:给名称为key的String值赋值为value
get key:返回名称为key的value值
对List数据类型的操作
lpush key value: 在名称为key的List的头部添加元素
rpush key value: 在名称为key的List的尾部添加元素
llen key:返回名称为key的List的长度
lrange key start end: 返回名称为key的List中start至end之间的元素
lset key index value: 给名称为key的List中index位置的元素赋值为value
rpop key:返回并删除名称为key的List中的尾元素
对全局value的操作命令:
exists key:确认一个key是否存在
del key:删除一个key
type key:返回值的类型
keys pattern:返回满足给定pattern的所有key
dbsize:返回当前数据库中key的数目
select dbindex:切换数据库
flushdb:删除当前数据库中所有的key(危险操作)