Redis入门
Redis入门
- Redis是一个基于内存的
key-value结构数据库- 性能极高 – 基于内存存储,读写性能高
 - 原子 - Redis 的所有操作都是原子性的。
 - 持久化 - Redis 支持数据的持久化。
 - 备份 - Redis 支持数据的备份,即 master-slave 模式的数据备份。
 - 适合存储热点数据(热点商品、咨询、新闻)
 
 - 官网:https://redis.io/
 - Redis应用场景:缓存、消息队列、任务队列、分布式锁
 
Redis简介
- Redis是用C语言开发的一个开源的、高性能的键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化NoSql数据库
 - NoSql(Not Only Sql),不仅仅是SQL,泛指非关系型数据库,NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充
 
下载与安装
下载地址
- Windows 版:https://github.com/microsoftarchive/redis/releases
 - Linux 版:https://download.redis.io/releases/
 
Linux下安装
1.将Redis安装包上传到Linux
2.解压安装包,改成你自己的redis版本,路径我习惯解压到/usr/local
 | 
3.安装Redis的依赖环境gcc,我的云服务器已经装过了,本地的Linux还没装
 | 
4.进入/usr/local/redis根目录,进行编译
 | 
5.进入redis的src目录,进行安装
 | 
MacOS下安装
从终端运行:
 | 
这将在您的系统上安装 Redis。
启动Redis
在前台启动和停止 Redis
要测试您的 Redis 安装,您可以redis-server从命令行运行可执行文件:
 | 
如果成功,您将看到 Redis 的启动日志,Redis 将在前台运行。
要停止 Redis,请输入Ctrl-C。
使用 launchd 启动和停止 Redis
作为在前台运行 Redis 的替代方法,您还可以使用launchd在后台启动进程:
 | 
这将启动 Redis 并在登录时重新启动它。launchd您可以通过运行以下命令来检查托管 Redis 的状态:
 | 
如果该服务正在运行,您将看到如下输出:
 | 
要停止服务,请运行:
 | 
连接到 Redis
Redis 运行后,您可以通过运行以下命令对其进行测试redis-cli:
 | 
这将打开 Redis REPL。尝试运行一些命令:
 | 
Redis数据类型
介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5中常用的数据类型
- 字符串:String
 - 哈希:Hash
 - 列表:List
 - 集合:Set
 - 有序集合:Sorted Set
 
字符串(String)常用命令
| 命令 | 描述 | 
|---|---|
| SET key value | 设置指定key的值 | 
| GET key | 获取指定key的值 | 
| SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 | 
| SETNX key value | 只有在key不存在时设置key的值 | 
 | 
哈希(Hash)常用命令
Redis Hash是一个String类型的Field和Value的映射表,Hash特别适合用于存储对象
| 命令 | 描述 | 
|---|---|
| HSET key field value | 将哈希表key 中的字段field的值设为value | 
| HGET key field | 获取存储在哈希表中指定字段的值 | 
| HDEL key field | 删除存储在哈希表中的指定字段 | 
| HKEYS key | 获取哈希表中所有字段 | 
| HVALS key | 获取哈希表中所有值 | 
| HGETALL key | 获取在哈希表中指定key的所有字段和值 | 
列表(List)常用命令
Redis List是简单的字符串列表,按照插入顺序排序
| 命令 | 描述 | 
|---|---|
LPUSH key value1 [value2] | 
将一个或多个值插入到列表头部 | 
LRANGE key start stop | 
获取列表指定范围内的元素 | 
RPOP key | 
移除并获取列表最后一个元素 | 
LLEN key | 
获取列表长度 | 
BRPOP key1 [key2] timeout | 
移出并获取列表的最后一个元素 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 | 
集合(Set)常用命令
Redis set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
| 命令 | 描述 | 
|---|---|
| SADD key member1 [member2] | 向集合添加一个或多个成员 | 
| SMEMBERS key | 返回集合中的所有成员 | 
| SCARD key | 获取集合的成员数 | 
| SINTER key1 [key2] | 返回给定所有集合的交集 | 
| SUNION key1 [key2] | 返回所有给定集合的并集 | 
| SDIFF key1 [key2] | 返回给定所有集合的差集 | 
| SREM key member1 [member2] | 移除集合中一个或多个成员 | 
有序集合(Sorted Set)常用命令
Redis Sorted Set有序集合是String类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score) 。Redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。
| 命令 | 描述 | 
|---|---|
| ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | 
| ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 | 
| ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment | 
| ZREM key member [member …] | 移除有序集合中的一个或多个成员 | 
通用命令
| 命令 | 描述 | 
|---|---|
| KEYs pattern | 查找所有符合给定模式(pattern)的key | 
| EXISTs key | 检查给定key是否存在 | 
| TYPE key | 返回key所储存的值的类型 | 
| TTL key | 返回给定key的剩余生存时间(TTL, time to live),以秒为单位 | 
| DEL key | 该命令用于在key存在是删除key | 
在Java中使用Redis
简介
- Redis的Java客户端有很多,官方推荐的有三种
JedisLettuceRedisson
 - Spring对Redis客户端进行了整合,提供了SpringDataRedis,在Spring Boot项目中还提供了对应的Starter,即
spring-boot-starter-data-redis 
Jedis
使用Jedis的步骤
- 获取连接
 - 执行操作
 - 关闭连接
 
在此之前我们需要导入一下Jedis的maven坐标
XML
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>编写测试类
JAVA
@SpringBootTest
class RedisTestApplicationTests {
@Test
void contextLoads() {
//1. 获取连接
Jedis jedis = new Jedis("localhost", 6379);
//2. 执行具体操作
jedis.set("name", "Hades");
jedis.hset("stu", "name", "Tom");
jedis.hset("stu", "age", "18");
jedis.hset("stu", "phone", "13355558888");
Map<String, String> map = jedis.hgetAll("stu");
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key + ":" + value);
}
String name = jedis.get("name");
System.out.println(name);
//3. 关闭连接
jedis.close();
}
}输出结果
num:13355558888
name:Tom
age:18
HadesJedis我们了解一下即可,大多数情况下我们还是用SpringDataRedis的
Spring Data Redis
- SpringBoot项目中,可以使用
SpringDataRedis来简化Redis(常用) - Spring Data Redis中提供了一个高度封装的类:
RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:- ValueOperations:简单K-V操作
 - SetOperations:set类型数据操作
 - ZSetOperations:zset类型数据操作
 - HashOperations:针对map类型的数据操作
 - ListOperations:针对list类型的数据操作
 
 
1.使用SpringDataRedis,我们首先需要导入它的maven坐标
 | 
2.之后重新设置一下序列化器,防止出现乱码,在config包下创建RedisConfig配置类
 | 
3.随后在application.yml中配置一下连接redis的相关配置
 | 
4.String类型数据操作
 | 
输出结果如下,由于name已经存在,故Kyle设置失败,最后返回false,10秒过后,我们再去redis中get name,则输出nil,表示不存在
Hades
9527
false
5.Hash类型数据操作
 | 
输出结果如下
name:Hades
age:18
hobby:ApexHades
18
Apex
6.List类型数据操作
 | 
输出结果如下
D C B A
D C B A
0
7.Set类型数据操作
 | 
输出结果如下,符合预期
d b c a
d a
8.ZSet类型数据操作
 | 
输出结果如下
b
c
ac
9.通用的数据类型操作
 | 
输出结果如下
tmp
name
4204000400
stu
myDatatmp
name
4204000400
stu
myDataSET