使用Redis存取数据

1、什么是Redis

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存的NoSQL数据存储服务,是非关系型的、可持久化的Key-Value数据库。

2、在SpringBoot项目中使用Redis

  1. 下载Redis
    下载地址:redis.io
    每次使用Redis前都需要将Redis客户端打开,确保Redis在后台运行。
  2. 添加依赖项
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.4.0</version>
</dependency>
  1. 要操作Redis中的数据,需要使用RedisTemplate对象,则在csmall-product-webapi的根包下的config包中创建RedisConfiguration类,并在其中进行配置:
package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import java.io.Serializable;

@Configuration
public class RedisConfiguration {
    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setValueSerializer(RedisSerializer.json());
        return redisTemplate;
    }
}
  1. DAO类实现Serializable接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account implements Serializable {//用户信息
    String id;
    String email;
    String username;
    String password;
    int cancelnum;

    public String getToken(Account account) {
        String token="";
        token= JWT.create().withAudience(account.getId())
                .sign(Algorithm.HMAC256(account.getPassword()));
        return token;
    }
}
  1. 用Redis存数据
    因为Redis是Key-Value数据库,所以存数据时需要指定key对应的value。
RedisTemplate<String, Serializable>  redisTemplate.opsForValue()
                .set("name","张三",60, TimeUnit.SECONDS);
  1. 取数据
    只需输入key进行查找对应的value。
Serializable serializable=redisTemplate.opsForValue()
                .get("name");

3、Redis使用场景

适合存储非结构化数据,比如:文章、评论:
(1)这些数据通常用于模糊处理,例如全文搜索、机器学习,适合存储较为简单的数据。
(2)这些数据是海量的,并且增长的速度是难以预期的。
(3)按照key获取数据效率很高,但是对于join或其他结构化查询的支持就比较差。

4、Redis 中的过期数据可以通过如下两种方式处理:

  1. 定期删除:Redis 会在每隔一段时间内(由参数 hz 决定,一般为 10~1000 次/秒),随机检查一部分过期数据,并将其删除。这种方式的优点是简单易行,缺点是可能会导致 Redis 中过期数据的存留时间过长或过短,不够精确。

  2. 惰性删除:当 Redis 客户端访问一个过期的数据时,Redis 会在读取数据之前检查一下这个数据是否已经过期,如果是,则立即删除该数据。这种方式的优点是能够精确地删除过期数据,缺点是可能会导致删除请求过多而影响性能。

为了平衡定期删除和惰性删除的优缺点,Redis 采用了一种综合策略:

  1. 设置过期时间时,同时计算出该 key 的 TTL 值,将其存储在过期时间戳集合中。

  2. 定期删除线程会定期扫描过期时间戳集合,并删除其中已经过期的 key。

  3. 当 Redis 客户端尝试访问一个 key 时,Redis 会先检查该 key 是否在过期时间戳集合中,并判断其是否已经过期,如果已经过期则立即删除,否则返回该 key 的值。

这种综合策略既能够精确地删除过期数据,又不会过于频繁地进行删除操作。

引用:

http://t.csdn.cn/Xyodw

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中使用Redis存取数据,你需要使用Redis的Java客户端来与Redis服务器进行交互。以下是一个简单的示例代码: 1. 首先,你需要添加Redis的Java客户端依赖。常用的Java Redis客户端有Jedis和Lettuce,你可以选择其中一个。 对于Jedis,可以在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> ``` 对于Lettuce,可以在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>6.2.5.RELEASE</version> </dependency> ``` 2. 创建Redis连接并进行数据取操作。 使用Jedis客户端的示例代码如下: ```java import redis.clients.jedis.Jedis; public class RedisExample { public static void main(String[] args) { // 创建Redis连接 Jedis jedis = new Jedis("localhost", 6379); // 数据 jedis.set("key", "value"); // 获取数据 String value = jedis.get("key"); System.out.println(value); // 关闭连接 jedis.close(); } } ``` 使用Lettuce客户端的示例代码如下: ```java import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisCommands; public class RedisExample { public static void main(String[] args) { // 创建Redis连接 RedisURI uri = RedisURI.Builder.redis("localhost", 6379).build(); RedisClient client = RedisClient.create(uri); StatefulRedisConnection<String, String> connection = client.connect(); RedisCommands<String, String> commands = connection.sync(); // 数据 commands.set("key", "value"); // 获取数据 String value = commands.get("key"); System.out.println(value); // 关闭连接 connection.close(); client.shutdown(); } } ``` 这是一个简单的示例,你可以根据自己的需求进行更复杂的数据取操作。记得在使用完毕后关闭连接以释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值