一、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: