Redis安装+Java中使用,看完这篇你就会了

一、Redis是干啥的?

Redis就是个存数据的地方,但它是放在内存里的。

你之前用的MySQL,数据是放在硬盘里的。读数据的时候,硬盘得转一下,稍微慢点。

Redis不一样,它把数据放内存里。你用过电脑就知道,内存比硬盘快太多了。

所以Redis通常拿来干两件事:

1、缓存:把常用的数据放Redis里,不用每次去数据库查,速度飞快

2、临时数据:比如登录验证码、投票排名、秒杀库存这种,不需要长期存的

打个比方:MySQL像个大仓库,啥都往里放,但找东西得翻一会儿。Redis像个桌面上的小篮子,常用的东西搁这儿,一伸手就拿到了。

二、Redis下载和安装(Windows版)

先跟你说个事儿。官方其实没出Windows版,只有Linux版。但咱们平时开发用的是Windows,所以有人搞了个Windows能用的版本。

我推荐用这个: Memurai 或者微软维护的那个老版本。

不过最简单的办法是:直接去GitHub搜“Redis Windows”,找那个microsoftarchive/redis或者tporadowski/redis,下载zip包解压就能用。

下载地址:https://github.com/redis-windows/redis-windows/releases

操作步骤:

第1步:下载

搜tporadowski redis releases,找到最新的那个Redis-x64-xxx.zip,下载。

第2步:解压

解压到一个没有中文的路径,比如D:\Redis

第3步:启动Redis

进去那个文件夹,找到redis-server.exe,双击。

会弹出一个黑色的框,里面一堆日志。看到有个提示说Ready to accept connections,就说明Redis启动成功了。

注意: 这个黑框不能关,关了Redis就停了。你平时开发的时候就让它在那儿挂着就行。

第4步:测试一下

黑框开着的情况下,去文件夹里找到redis-cli.exe,双击打开。

在里面输入:

ping

它应该回你:

PONG

如果能回PONG,说明Redis活得好好的。

三、顺便说一下Linux上的安装(如果你是服务器部署)

如果你以后要把项目部署到服务器上,服务器一般都是Linux系统。Linux上装Redis就一行命令的事儿:

# Ubuntu/Debian 系统
sudo apt update
sudo apt install redis-server
# CentOS/RHEL 系统
sudo yum install redis

装完启动:

sudo systemctl start redis
sudo systemctl enable redis  # 开机自启

然后也一样可以用redis-cli连上去。

不过这些你现在不用太管,等你需要部署的时候再来看就行。

四、Java里怎么用Redis?

Redis跑起来了,下一步是在你的Spring Boot项目里连上它。

Spring Boot操作Redis,一般用Spring Data Redis,它封装好了各种操作,你直接调就行。

第1步:加依赖

在你的pom.xml里加上:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

还需要一个连接池的依赖(不然容易报错):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

加完刷新一下Maven,让jar包下下来。

第2步:写配置文件

在application.properties里加上:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
spring.redis.timeout=3000ms

spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0

注意: 上面的配置都是默认值,你暂时不用改。localhost6379就是Redis的默认地址和端口。

第3步:写个测试代码

在你的测试类里写一段代码,试试能不能存进去、读出来。

@SpringBootTest
class RedisTest {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Test
    void testRedis() {
        // 存数据
        redisTemplate.opsForValue().set("name", "已经码好了");
        // 取数据
        String name = (String) redisTemplate.opsForValue().get("name");
        System.out.println("从Redis读出来的数据:" + name);
    }
}

跑一下这个测试。如果控制台打印出来从Redis读出来的数据:已经码好了,那就恭喜你,连上了!

五、一个更实用的例子

上面那个例子只是测试用,真正做项目的时候,你可能会把Redis用在Service里。

比如你做一个查询用户信息的接口:

@Service
public class UserService {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private UserMapper userMapper;
    public User getUserById(Long id) {
        // 先从Redis里查
        String key = "user:" + id;
        User user = (User) redisTemplate.opsForValue().get(key);
        // 如果Redis里有,直接返回
        if (user != null) {
            System.out.println("从缓存中读取");
            return user;
        }
        // Redis里没有,去数据库查
        user = userMapper.selectById(id);
        // 查到之后,放进Redis,下次就不用查数据库了
        if (user != null) {
            redisTemplate.opsForValue().set(key, user);
            System.out.println("从数据库读取,并放入缓存");
        }
        return user;
    }
}

​​​​​​​这个就是缓存穿透的一个简单写法。先查Redis,查不到再查数据库,然后把结果放回Redis。

你的毕设里如果有一段这样的代码,答辩的时候老师问你“你有没有做什么优化”,你就可以把这个拿出来说,绝对加分。

💡 小提示:真正写代码的时候,注解@Cacheable可以自动干这个事,不用自己写if-else。不过手动写的更直观,适合给老师讲原理。看你喜欢哪个。

六、常用Redis命令(知道几个就够了)

用Java操作Redis的时候,底层其实调的就是这些命令。了解一下也不亏:

命令

干啥的

Java里的写法

SET key value

存字符串

opsForValue().set("name","abc")
GET key

取字符串

opsForValue().get("name")
HSET key field value

存哈希(像个对象)

opsForHash().put("user:1","name","abc")
HGET key field

取哈希

opsForHash().get("user:1","name")
EXPIRE key seconds

设置过期时间

expire("key", 10, TimeUnit.SECONDS)
DEL key

删除

delete("key")

平时用得最多的就是SETGET,其他的用到再查就行。

七、常见翻车现场

“双击redis-server.exe闪退”

大概率是端口被占了。6379端口已经被别的程序用了。关掉其他占用的程序,或者换个端口启动。

换端口的话,得改配置文件redis.windows.conf里的port 6379改成别的,比如port 6380

“Java连不上,报连接超时”

先检查一下Redis有没有启动。看看那个黑框还在不在,里面有没有报错。

再看看代码里的hostport是不是写对了。如果Redis和项目都在自己电脑上,host就是localhost

“报错:Unable to connect to Redis”

大概率是没连上。用redis-cli试试能不能连。如果命令行都连不上,那就是Redis没启动好。

“存进去的数据取出来是乱码”

RedisTemplate默认的序列化方式存出来是这样的。如果你看着不舒服,可以自己配置一下RedisTemplate,用StringRedisSerializer当key的序列化。代码有点长,你需要的话可以回复【Redis配置】,我发你。

不过说真的,乱码归乱码,不影响你用,先能跑通比啥都重要。

“Linux上装好了,但Java连不上”

检查一下防火墙。Linux上Redis默认只允许本机连,你要从别的机器连,得改配置文件里的bind 127.0.0.1改成bind 0.0.0.0。不过注意,这样有安全风险,建议只是开发测试的时候这么搞。

八、顺便说一下

Redis装好、连好之后,你能干的事儿还挺多的:

1、存登录验证码(设置个5分钟过期)

2、存热门文章列表(用List或者ZSet存)

3、接口防刷(用户1分钟内只能请求10次)

4、分布式锁(复杂点的场景)

不过这些都是进阶操作了,先把基础的跑通再说。

你在毕设里哪怕只用到了SET和GET做缓存,那也是一个加分项。因为很多同学的毕设就是纯增删改查,加了Redis你就比他们多了个“优化”的亮点。

安装包去哪儿拿?

关注「已经码好了」,回复【Redis】,我把压缩包发你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纽轱辘小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值