Redis
1. Redis介绍
-
NoSQL的引言
NoSQL(Not Only SQL),意为不仅仅是SQL,泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。
RDBMS: 关系型数据库
NoSQL: 泛指非关系型数据库
-
为什么是NoSQL
随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如 商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据建库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观,nosql这个技术门类的出现,更好地解决了这些问题,他告诉了世界不仅仅是sql.
-
NoSQL的四大分类
- 键值(Key-Value)存储数据库
- 列存储数据库
- 文档型数据库
- 图形(Graph)数据库
-
NoSQL应用场景
- 数据模型比较简单
- 需要灵活性更强的IT系统
- 对数据库性能要求较高
- 不需要高度的数据一致性(NoSQL 产品对于事物支持都不是特别良好)
-
什么是Redis
Redis 开源 遵循BSD 基于内存数据存储 都被用于作为 数据库 缓存 消息中间件
Redis 数据内存中 内存:读写快 断电消失 机制:持久化机制 内存数据 定期写入到磁盘中
- 总结:Redis是一个内存型的数据库 缓存 消息中间件
-
Redis特点
- Redis是一个高性能key/value内存型数据库
- Redis支持丰富的数据类型
- Redis支持持久化
- Redis单进程、单线程 线程安全 Redis分布式锁
2. Redis安装
-
Redis安装
-
下载redis安装包并上传到linux
-
解压redis安装包
tar -zxvf redis-6.2.3.tar.gz
安装前要确定有 gcc 的依赖
yum install -y gcc
-
安装redis
# 进入目录 cd redis-6.2.3/ # 编译 安装 make MALLOC=libc make install PREFIX=/usr/redis
-
进入/usr/redis/bin目录启动redis服务
cd /usr/redis/bin ./redis-server
-
克隆一个session,开启redis客户端
cd /usr/redis/bin/ ./redis-cli -h localhost -p 6379 //如果在一台机器上 ./redis-cli 命令即可
-
redis启动服务的细节
-
注意直接使用./redis-server方式启动使用的是redis-server这个shell脚本中默认配置
-
如何在启动redis时指定配置文件启动
注意:默认在redis安装完成之后再安装目录没有任何配置文件,需要在源码目录中复制redis.conf配置文件到安装目录
# a. 进入源码目录 cp redis.conf /usr/redis # b. 进入/usr/redis安装目录查看复制配文件 cd /usr/redis # c. 进入 bin 目录加载配置文件启动 ./redis-server ../redis.conf # 可以使用相对路径
注意 如果需要其它机器可以访问则需要修改配置文件
# bind 后是允许访问的ip,可以将其注释掉 # 127.0.0.1 //代表只允许本机访问 # 关闭 protected mode 这也是Redis3.2以上版本加入的新特性,开启保护模式的redis只允许本机登录 protected-mode no
-
修改redis默认端口号
vim redis.conf 可以修改里面的 port
-
加载自己配置的配置文件启动 redis
./redis-server ../redis.conf
-
-
redis密码
- Redis 配置 : redis的配置文件位于 Redis安装目录下,文件名为 redis.conf (Windows 中名为 redis.windows.conf)
- 初始化redis密码:配置文件中有个参数:requirepass 这个就是配置redis访问密码的参数;
例如: requirepass 123 (注意:改密码需要重启redis才能生效) - 不重启redis设置密码:
命令: config set requirepass 123
查询密码命令:
获得权限: auth 123
config get requirepass - 登录有密码的redis:
登陆的时候输入密码: redis -cli -p 6379 -a 123
或者先登录后验证:
redis -cli -p 6379
auth 123
-
-
Redis数据库相关指令
-
redis中库的概念
库:database用来存放数据一个基本单元 一个库可以存放key-value键值对 redis 中每一个库都有一个唯一名称|编号 从0开始默认库的个数:16个库 库的编号: 0-15 默认使用是0号库;
切换库命令: select dbid(库编号)
select <dbid>
- redis中清除库的指令
# 清空当前库 FLUSHDB # 清空所有库 FLUSHALL
-
-
操作key相关的指令
# 删除key DEL key # 检查给定key是否存在。存在返回1,否则返回0 EXISITS key # 为给定key设置生存时间,当key过期时,它会被自动删除 EXPIRE key seconds # 将当前数据库的key移动到给定的数据库db中 MOVE key db # 以秒为单位,返回给定key的剩余生存时间(TTL, time to live) # key 不存在时返回-2;当 key 存在但没有设置剩余生存时间时返回-1 TTL key # 将key 改名为 newkey。当key 和 newkey 相同,或者key不存在时返回一个错误 RENAME key newkey # 返回 key 所存储的值的类型 TYPE key # 返回值 none(不存在) string(字符串) list(列表) set(集合) zset(有序集) hash(哈希表)
-
数据类型
- Sring类型
- list类型
- set类型
- zset类型
- hash类型
3.Redis与springboot整合
-
通过 Jedis 在Java程序中使用 Redis
引入Jedis依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
使用
public class TestRedis { public static void main(String[] args) { // 创建jedis客户端对象 Jedis jedis = new Jedis("192.168.209.1",6379); // 选择使用一个库 默认使用0号库 jedis.select(0); // 获取redis中所有key信息 Set<String> keys = jedis.keys("*"); keys.forEach(key-> System.out.println("key = " + key)); // 释放资源 jedis.close(); } }
-
SpringBoot整合Redis
Spring Boot Data Redis 中提供了 RedisTemplate 和 StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子类,两个方法基本一致,不同之处主要体现在操作的数据类型不同,RedisTemplate中的两个泛型都是Object,意味着存储的key和value都可以是一个对象,二StringRedisTemplate的两个泛型都是String,意味着StringRedisTemplate的key和value都只能是字符串。
- 注意:使用RedisTemplate默认是将对象序列化到Redis中,所以放入的对象必须实现对象序列化接口。
-
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
使用
@Autowired StringRedisTemplate stringRedisTemplate; // 字符串对象 @Autowired RedisTemplate redisTemplate; // Object对象 需要实现序列化