redis介绍
redis是一个nosql数据库,是完全开源免费的,是一个高性能的key-value数据库。
- 关系型数据库有mysql,oralce等,数据是存放在硬盘中的,每次对数据进行操作都是io操作,而io操作的性能相对来说是比较差的;
- 非关系型数据库有redis等,数据是存放在内存中的,如果redis一旦挂掉,数据可能会丢失,因此一般我们都会选择持久化机制; redis内存大小是有一个阈值限制的, 一旦超出阈值大小,会有一个淘汰策略;
- jvm内置缓存框架;
redis应用场景
- Token令牌生成;
- 短信验证码code;
- 查询数据缓存 (减轻数据库压力);
- 实现计数器;(redis本身是一个单线程,可以保证原子性)
- 分布式锁;
- 延迟操作;(如果在一定时间范围内没有进行支付,关闭订单 实现方式对key进行监听)
- 分布式消息中间件;(分布/订阅 市面上基本上没有用到)
redis 环境安装
- https://redis.io/ redis官网地址
官网下载redis
- 上传redis包到linux服务器,并解压tar -zxvf redis-5.0.6.tar.gz
- cd redis-5.0.6
- 编译 make -j8
- make PREFIX=~/redis install
redis配置文件说明:
- 将redis设置为后台启动:daemonize yes
- 设置redis账号密码:requirepass 123456
./redis-cli -h ip -p port -a password
- 设置redis允许ip访问:bind 0.0.0.0
- redis默认情况下分为16个库:databases 16
redis线程模型
redis采用nio的io多路复用原则,也就是一个线程去维护多个redis客户端连接,从而提高并发效率和保证线程安全问题;底层是采用linux的epoll技术避免空轮训;
redis数据结构
string类型 hash类型 list类型 set类型 sort-set类型
string类型
string类型
redis客户端
hash类型
hash类型
redis客户端
list类型
list类型
redis客户端
set类型
set类型
redis客户端
redis中如何存放一个java对象
- 存放json对象: set key=user value={"id":"0001", "name":"zhangsan"}
缺点:提取出的json对象需要转,比较麻烦; - 存放二进制:eg:ssl-sso框架底层是使用二进制进行存储;