Redis简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。可以用作:
- 数据库
- 缓存
- 消息中间件
redis官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。
关系型数据库:mysql、sqlServer、Oracle,适用于需要事务支持的情况,基于sql的结构化查询存储,处理复杂的关系。
非关系型数据库:MongoDB,Cassandra,Redis
Redis应用场景
缓存
任务队列
消息队列
分布式锁
Redis下载与安装
Redis安装包分为Linux和Windows版本
- Linux 版本:https://download.redis.io/releases/
Linux安装Redis
将Redis安装包上传到Linux
解压安装包(这里我安装到software文件夹)
cd /software tar -zxvf redis-xxx.tar.gz -C /software
安装redis的依赖环境gcc,这里可以使用yum安装
yum install gcc-c++
进入
/software/redis
,进行编译cd /software/redis # 编译 make
进入redis的src目录,进行安装
# 进入redis的src目录,此时路径为/software/redis/src cd /src # 安装 make install
Windows安装Redis
- 下载对应的Windows版本:https://github.com/microsoftarchive/redis/releases
- Windows版本为免安装版本,下载后可直接使用
Redis服务启动与停止
以下主要基于虚拟机上Centos 7
启动与停止
在redis目录/software/redis/
中,进入/src
文件,执行redis-server
启动redis服务,redis默认端口为6379
# 进入到redis目录下的src文件下
cd /software/redis/sec
# 启动redis-server
./redis-server
redis配置
在redis
根目录下,打开redis.conf
文件
# 进入redis根目录
cd /software/redis
# 打开配置文件
vim redis.conf
修改redis.conf
配置文件让redis
在后台运行,将daemonize
字段改成daemonize yes
.然后使用修改后的配置文件启动redis
# 在redis根目录下/software/redis
src/redis-server ./redis.conf
添加redis启动密码
打开redis.conf
配置文件,找到注释的requirepass
打开,并在后面添加redis
密码。配置好后kill -9 <redis进程pid>
,重新启动redis
服务
# 杀死进程后重新启动
src/redis-server ./redis.conf
# 使用密码登录
src/redis-cli -h root -p 6379 -a
远程连接Redis
修改redis.conf
配置文件,注释掉bind 127.0.0.1
。若服务器默认没有开启6379端口,先开启6379端口
# 打开6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 重启防火墙使其生效
firewall-cmd --reload
注:防火墙相关命令
# 查看防火墙状态
systemctl status firewalld
# 暂时关闭防火墙
systemctl stop firewalld
# 开启防火墙
systemctl start firewalld
# 开放指定端口
firewall-cmd --zone=public --add-port=<端口号>/tcp --permanent
# 开放后刷新使防火墙生效
firewall-cmd --reload
Redis数据类型
介绍
Redis存储的是key-value
结构的数据,其中key是字符串类型,value有5种常见的数据类型
value常见类型: | 说明 |
---|---|
字符串 String | string普通字符串 |
哈希 hash | hash适合存储对象 |
列表 list | list按照插入顺序排序,可以存储重复元素 |
集合 set | set无序集合,没有重复元素 |
有序集合 sorted set | sorted set有序集合,没有重复元素 |
Redis常用命令
字符串String操作命令
Redis中字符串类型常用命令: | 说明 |
---|---|
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
列表是简单的字符串列表,按照插入顺序排序
常用命令: | 说明 |
---|---|
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客户端很多,官方推荐的有三种:
- Jedis
- Lettuce
- Redisson
Spring
对Redis
客户端进行了整合,提供了Spring Data Redis
,在Spring Boot
项目中还提供了对应的Starter,即spring-boot-starter-data-redis
Jedis
Jedis的maven
坐标
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.0-rc1</version>
</dependency>
使用Jedis操作Redis的步骤:
- 获取连接
- 执行操作
- 关闭连接
测试代码
public class JedisTest {
@Test
public void testRedis() {
//1. 获取连接
Jedis jedis = new Jedis("localhost", 6379);
//2. 执行具体操作
jedis.set("username", "user");
String value = jedis.get("username");
System.out.println(value);
jedis.hset("myhash", "addr", "shanghai");
String hValue = jedis.hget("myhash", "addr");
System.out.println(hValue);
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.println(key);
}
//3. 关闭连接
jedis.close();
}
}
Spring Data Redis
Spring Data Redis
中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
ValueOperations
:简单K-V操作SetOperations
:set类型数据操作ZSetOperations
:zset类型数据操作HashOperations
:针对map类型的数据操作ListOperations
:针对list类型的数据操作
在项目中使用
- 在
maven
中导入spring-boot-starter-data-redis
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>3.0.0</version>
</dependency>
在
application.yml
中配置redis相关信息spring: redis: host: localhost port: 6379 password: root database: 0 jedis: #Redis连接池配置 pool: max-active: 8 #最大连接数 max-wait: 1ms #连接池最大阻塞等待时长 max-idle: 4 #连接池最大空闲连接 min-idle: 0 #连接池最小空闲连接
创建Redis配置类,重新设置序列表器,避免乱码
@Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); //默认的Key序列化器为:JdkSerializationRedisSerializer redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } }