一、Redis简介
Redis是一个基于内存的key-value结构数据库,是互联网技术领域使用最为广泛的存储中间件,Redis可以存储的值类型很多,也被称为结构化的NoSql数据库(非关系型数据库,是对关系型数据库的补充)。
1.优点
(1)基于内存存储,读写性能高;
(2)适合存储热点数据(热点商品、资讯、新闻);
(3)企业应用广。
2.应用场景
(1)数据缓存
(2)消息队列
(3)任务队列
(4)注册中心
(5)发布订阅
(6)分布式锁
二、Redis下载与安装
1.下载地址
(1)Windows版下载地址:http://github.com/microsoftarchive/redis/releases
(2)Linux版下载地址:https://download.redis.io/releases/
2.Linux下安装Redis
(1)将Redis安装包上传到Linux
(2)解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local
(3)安装Redis的依赖环境gcc,命令:yum install gcc-c++
(4)进入/usr/local/redis-4.0.0,进行编译,命令:make
(5)进入redis的src目录进行安装,命令:make install
三、Redis入门
1.Linux下Redis服务的启动与停止
(1)启动服务
执行redis/src下的redis-server来启动Redis服务,从启动日志中可以看到Redis默认端口号为6379。
(2)连接服务
通过执行redis/src下的redis-cli可以连接到本地Redis服务,默认情况下不需要认证即可连接成功。
(3)停止服务
Ctrl + C停止Redis服务。
(4)退出客户端
输入exit或者quit命令。
(5)配置后台运行Redis服务
1)修改redis下的配置文件redis-conf,将daemonize no改为daemonize yes;
2)在redis下运行src/redis-server ./redis.conf命令。
【注意】修改配置文件后需要重启Redis服务配置才能生效,并且启动Redis服务时需要显示的指定配置文件 ,需要在后面加上参数./redis.conf。
2.Windows下Redis服务的启动与停止
(1)启动服务
执行redis-server.exe。
(2)连接服务
执行redis-cli.exe。
3.设置Redis服务密码
将配置文件redis-conf中的 # requirepass foobared配置项取消注释(默认为注释状态),foobared为密码,可以自行修改。
连接服务时,通过-a password的形式进行认证登录。
【tips】-h:指定连接的Redis服务的ip地址;-p:指定连接的Redis服务的端口号;-a:指定连接的Redis服务的密码。
4.设置允许客户端远程连接Redis服务
将配置文件redis-conf中的bind 127.0.0.1注释起来,再重启服务,即可。
【注意】记得开启指定端口!
四、★Redis数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
1.字符串string
普通字符串,常用。
2.哈希hash
适合存储对象 。
3.列表list
按照插入顺序排序,可以有重复元素。
4.集合set
无序集合,没有重复元素。
5.有序集合sorted set/zset
集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素。
五、Redis常用命令
Redis命令大全参考:Redis中文网,https://www.redis.net.cn/
1.String类型常用命令
| 命令 | 说明 |
|
SET key value |
设置指定key的值 |
|
GET key |
获取指定key的值 |
|
SETEX key seconds value |
设置指定key的值,并将 key 的过期时间设为 seconds 秒 |
|
SETNX key value |
只有在 key 不存在时才会设置 key 的值 |
【tips】①redis中的空是nil。
②对于同一key且String类型的value,后设置的value会覆盖之前设置的值。
2.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 的所有字段和值 |
3.List常用命令
Redis list是简单的字符串列表,按照插入顺序排序,元素可重复。
|
LPUSH key value1 [value2] |
将一个或多个值插入到列表头部 |
|
LRANGE key start stop |
获取列表指定范围[strat,stop]内的元素,从0开始计,[0,-1]表示所有元素 |
|
RPOP key |
移除并获取列表的最后一个元素 |
|
BRPOP key1 [key2 ] timeout |
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
|
LLEN key |
获取列表长度 |
4.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] |
移除集合中一个或多个成员 |
5.Sorted set常用命令
Redis sorted set是string类型元素的集合,且元素不重复。每个元素都会关联一个double类型的分数(score,分数可重复),并通过分数来为集合中的成员进行升序排序。
|
ZADD key score1 member1 [score2 member2] |
向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
|
ZRANGE key start stop [WITHSCORES] |
返回有序集合中指定区间内的成员(或返回成员及对应分数) |
|
ZINCRBY key increment member |
有序集合中对指定成员member的分数加上增量increment |
| ZREM key member [member2] |
移除有序集合中的一个或多个成员 |
6.通用命令
Redis中的通用命令,主要是针对key进行操作的相关命令。
|
KEYS pattern |
查找所有符合给定模式(pattern)的key |
|
EXISTS key |
检查给定 key 是否存在,不存在返回0 |
|
TYPE key |
返回 key 所储存的值的类型 |
|
TTL key |
返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位
|
|
DEL key [key2] |
用来删除指定键值对
|
六、在Java中操作Redis
1.介绍
(1)使用Redis的Java客户端,就如同使用JDBC操作MySQL数据库一样。Redis 的 Java 客户端很多,官方推荐的有三种:
- Jedis
- Lettuce
- Redisson
(2)Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。
2.Jedis的使用
(1)导入坐标
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version> </dependency>
(2)获取连接
(3)执行操作
(4)关闭连接
@Test
public void testRedis(){
//1.获取连接
Jedis jedis = new Jedis("localhost",6379);
//2.执行操作
jedis.set("username","xiaoming");
String value = jedis.get("username");
//3.关闭连接
jedis.close();
}
3.★Spring Data Redis
在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。
(1)介绍
Spring Data Redis提供了一个高度封装的类:RedisTemplate,针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
|
ValueOperations |
简单K-V操作 |
|
SetOperations |
set类型数据操作 |
|
ZSetOperations |
zset类型数据操作 |
|
HashOperations |
针对hash类型的数据操作 |
|
ListOperations |
针对list类型的数据操作 |
1)导入坐标
<!--maven坐标--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.4.8</version> </dependency> <!--SpringBoot starter坐标--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2)配置文件
spring: #Redis相关配置 redis: host: localhost port: 6379 #password: 123456 database: 0 #redis一共提供了16个数据库,默认使用0号数据库 jedis: #Redis连接池配置 pool: max-active: 8 #最大连接数 max-wait: 1ms #连接池最大阻塞等待时间 max-idle: 4 #连接池中的最大空闲连接 min-idle: 0 #连接池中的最小空闲连接3)提供配置类
RedisTemplate默认使用的序列化器JdkSerializationRedisSerializer对key进行的序列化效果,使代码设置的key值与存进redis的key值有差别。
★在Redis配置类中将序列化器改为StringRedisSerializer即可。
/**
* 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;
}
}
【tips】★★也可以直接使用StringRedisTemplate:
京公网安备 11010502036488号