redis的简单应用

本文介绍了Redis这种非关系型数据库,区别于主流的MySQL和Oracle。在大型Web应用的登录模块中,可取消session使用,用Redis存储验证码字符串。还阐述了Java中Redis的配置,展示了验证码模块效果,并介绍了cmd命令行对Redis的简单操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis简介

redis是一种非关系型数据库,不同于主流的MySQL和Oracle数据库,其简易方便的特性为大家所熟知

我的应用

web应用常见的模块——登录模块,登录模块中一般都会输出验证码,通常会通过session进行数据的绑定,过多的session会影响内存的读取,所以对于大型的web应用,我们可以,取消session的使用,而通过redis数据库对数据进行保存。这里就是采用redis对验证码字符串进行存储。

Redis——java配置

1、redis.properties

# 最大闲置个数
redis.maxIdle=30
# 最小闲置个数
redis.minIdle=10
# 最大连接个数
redis.maxTotal=40
# 连接的ip地址
redis.url=127.0.0.1
# 端口号 默认6379
redis.port=6379

2、RedisUtil.java

public class RedisUtil {

    private static JedisPool pool = null;

    static {
        InputStream is = RedisUtil.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties properties = new Properties();
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.get("redis.maxIdle").toString()));
        jedisPoolConfig.setMinIdle(Integer.parseInt(properties.get("redis.minIdle").toString()));
        jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.get("redis.maxTotal").toString()));
        pool = new JedisPool(jedisPoolConfig, properties.getProperty("redis.url"), Integer.parseInt(properties.get("redis.port").toString()));
    }

    public static Jedis getJedis() {
        return pool.getResource();
    }

    public static void setPool(String key, String value) {
        getJedis().set(key, value);
    }

    public static String getPool(String key) {
        return  getJedis().get(key);
    }
}

3、mvc下需要的项目依赖

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.4.2</version>
        </dependency>

验证码模块(主要用于登录校验)

package com.itek.spring.day05.controller;

import com.itek.spring.day05.util.RedisUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import redis.clients.jedis.Jedis;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

/**
 * @program: springDay05
 * @description:
 * @author: xlYu
 * @create: 2019-07-01 14:37
 **/
@Controller
public class CapController {

    @RequestMapping("cap")
    public String capPage(HttpServletResponse resp) throws IOException {
        BufferedImage image = generateCap();
        resp.setContentType("image/jpeg");
        OutputStream os = resp.getOutputStream();
        ImageIO.write(image, "jpeg", os);
        os.close();
        return null;
    }

    private static BufferedImage generateCap() {
        BufferedImage image = new BufferedImage(100, 40, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        Random r = new Random();
        g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

        //验证码背景抠图
        g.fillRect(0, 0, 150, 40);
        g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
        g.setFont(new Font("微软雅黑", Font.BOLD, 30));
        String randomStr = generateRandomString(5);
        /**
         *
         *
         * 改用redis进行验证码的存取功能
         */

        Jedis jedis = RedisUtil.getJedis();
        jedis.hset("cap","capstr",randomStr);
        g.drawString(randomStr, 5, 30);
        for (int i = 1; i <= 8; i++) {
            g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
            g.drawLine(r.nextInt(150), r.nextInt(40), r.nextInt(150), r.nextInt(40));
        }
        return image;
    }

    private static String generateRandomString(int length) {
        Random r = new Random();
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int tip = r.nextInt(3);
            long result = 0;
            switch (tip) {
                case 0:
                    result = Math.round(Math.random() * 25 + 65);
                    stringBuffer.append((char) result);
                    break;
                case 1:
                    result = Math.round(Math.random() * 25 + 97);
                    stringBuffer.append((char) result);
                    break;
                case 2:
                    stringBuffer.append(new Random().nextInt(10));
                    break;
                default:
                    break;
            }
        }
        return stringBuffer.toString();
    }
}

效果展示

在这里插入图片描述

cmd命令行对redis进行简单操作(拿hash举例)

1、首先进入redis-server.exe
进入对应路径,不要关闭
2、另开dos界面,启动redis-cli.exe
创建hash,与获得hash
3、redis管理软件
可以在管理软件中看出刚刚设置的hash是没问题的
bye bye

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值