大家好 , 我是苏麟 , 今天带来强大的Redis .
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
官方网站 : 雷迪斯 (redis.io)
好用的可视化工具 : Quickredis
下载地址 : QuickRedis 发行版 - Gitee.com
好用的可视化工具 : RedisDesktopManager
官方网站 : https://redisdesktop.com/download
Spring Data Redis 的使用方式
开始使用 :
引入依赖
<!--springbot 整合 redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Redis配置 端口号默认6379 库默认0
#redis 配置
redis:
port: 6379
database: 0
host: localhost
序列化
/**
* 序列化 让JDK原生序列化转成JSON
*/
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> objectObjectRedisTemplate = new RedisTemplate<>();
objectObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);
//设置KEY 序列化使用 String 字符串
objectObjectRedisTemplate.setKeySerializer(RedisSerializer.string());
objectObjectRedisTemplate.setHashKeySerializer(RedisSerializer.string());
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置Value 序列化 格式
objectObjectRedisTemplate.setValueSerializer(jsonRedisSerializer);
objectObjectRedisTemplate.setHashValueSerializer(jsonRedisSerializer);
return objectObjectRedisTemplate;
}
}
操作
/**
* 目标 : 在JAVA中操作redis spring date redis
* spring date redis 中提供了一个高度封装了的一个类 RedisTemple 针对jedis客户端api进行了分类封装,将同一种类型封装成Operation接口
* ValueOperation : 简单K-V操作
* SetOperation : set类型数据操作
* ZSetOperation : zset类型数据操作
* HashOperation : Hash类型数据操作
* ListOperation : List类型数据操作
*/
@SpringBootTest
class ItslRedisApplicationTests {
@Autowired
RedisTemplate redisTemplate;
/**
* 目标 : 对5中不同类型数据进行操作
* opsForValue
* opsForHash
* opsForList
* opsForSet
* opsForZSet
*/
/**
* 操作String类型数据
*/
@Test
void testString() {
//set操作
redisTemplate.opsForValue().set("sl", "sl");
//get操作
System.out.println(redisTemplate.opsForValue().get("sl"));
//setex操作 命令为指定的 key 设置值及其过期时间。
//如果 key 已经存在, SETEX 命令将会替换旧的值。
redisTemplate.opsForValue().set("ty", "sl", 100, TimeUnit.SECONDS);
//setnx操作 命令在指定的 key 不存在时,为 key 设置指定的值。
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("ty", "ty");
System.out.println(aBoolean);
}
/**
* 目标 : 操作Hash数据类型
*/
@Test
void testHash() {
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002", "name", "sl");
hashOperations.put("002", "age", 20);
//取值
System.out.println(hashOperations.get("002", "age"));
System.out.println(hashOperations.get("002", "name"));
//获得hash结构中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
//获得hash结构中的所有值
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
/**
* 目标 : 操作List数据类型
*/
@Test
void testList() {
ListOperations listOperations = redisTemplate.opsForList();
//存值
listOperations.leftPush("ykList", "a");
listOperations.leftPushAll("ykList", "s", "b", "s", "t");
//取值
List ykList = listOperations.range("ykList", 0, -1);
for (Object o : ykList) {
System.out.println(o);
}
//获取长度
int size = ykList.size();
for (int i = 0; i < size; i++) {
//出队
Object ykList1 = listOperations.rightPop("ykList");
System.out.println("出队的是 : " + ykList1);
}
}
/**
* 目标 : 操作Set数据类型
*/
@Test
void testSet() {
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("ty", "a", "b", "v", "b");
//取值
Set ty = setOperations.members("ty");
for (Object o : ty) {
System.out.println("删除前 : " + o);
}
//删除成员
setOperations.remove("ty", "a");
//取值
Set tys = setOperations.members("ty");
for (Object o : tys) {
System.out.println("删除后 : " + o);
}
}
/**
* 目标 : 操作ZSet数据类型
*/
@Test
void testZSet() {
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset", "a", 10.1);
zSetOperations.add("myZset", "b", 11.1);
zSetOperations.add("myZset", "c", 12.1);
zSetOperations.add("myZset", "d", 13.1);
//取值
Set myZset = zSetOperations.range("myZset", 0, -1);
for (Object o : myZset) {
System.out.println("删除前 : " + o);
}
//修改分数
zSetOperations.incrementScore("myZset", "d", 25.4);
//删除成员
zSetOperations.remove("myZset", "a", "b");
//取值
Set myZsets = zSetOperations.range("myZset", 0, -1);
for (Object os : myZsets) {
System.out.println("删除后 : " + os);
}
}
/**
* 目标 : 通用操作
*/
@Test
void testCommon() {
//获取Redis中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean itcast = redisTemplate.hasKey("key");
System.out.println(itcast);
//删除指定key
redisTemplate.delete("key");
//获取指定key对应的value的数据类型
DataType dataType = redisTemplate.type("001");
System.out.println(dataType.name());
}
}
使用小技巧 :
登录态自动存储Redis中
开发中一个小用处 在分布式登录的时候用Seesion保存登录态 实现共享存储
第一步 :
引入依赖
<!--spring-session 整合 redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
第二步 :
在yml中配置
spring:
session:
#存储时间 86400 二个月
timeout: 86400
#自动存储到reids
store-type: redis
这样就完成自动存储到Redis中!
这期就到这里下期再见 !
拜拜!