Redis缓存数据库搭建与使用(window64安装版下载安装配置)

App接口校验需要验证token,为了减轻数据库压力,将(userid,token)保存在缓存里,方便读取。

1. 下载安装

下面是下载链接,包含Redis window64位安装版以及相关jar包
Redis下载链接

解压后双击 Redis-x64-3.2.100.msi 进入安装面板
可自行修改安装目录,所有勾选的地方都打上对号。
这里写图片描述
端口号默认 6379

如果安装后出现如下问题,说明.NET Framework 版本太低
这里写图片描述

打开命令窗口 输入dir %WINDIR%\Microsoft.NET\Framework\v* /O:-N /B
查看.NET Framework版本信息
这里写图片描述

解决方法,安装高版本的.NET Framework,安装程序在下载的压缩包里
NDP46-KB3045557-x86-x64-AllOS-ENU.exe

安装完成后重新安装Redis即可安装完成。

2. 运行Redis

Redis安装目录D:\Redis\redisbin64
这里写图片描述
打开cmd进入redis的目录下

D:
cd Redis/redisbin64
redis-server.exe redis.windows.conf(开启redis的命令)

这里写图片描述
若出现(连接错误) 如上图
creating server tcp listening socket 127.0.0.1:6379: bind No error
解决方案如下按顺序输入如下命令就可以连接成功

1. Redis-cli.exe
2. shutdown
3. exit
4. redis-server.exe redis.windows.conf

这里写图片描述

Redis开启成功的界面
这里写图片描述

3. 测试Redis

不要关闭当前命令窗口
重新打开个命令窗口 进入到redis下

D:
cd Redis/redisbin64
redis-server.exe redis.windows.conf
redis-cli.exe -h 127.0.0.1 -p 6379

测试
set name songhui
get name
del name

这里写图片描述
这里写图片描述


到此Redis已经可以使用了

下面是java代码redis工具类,需要的jar都在下载的压缩包里面。

package com.sh.tools;

import net.sf.json.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Redis存储工具
 * ClassName: RedisTool 
 * @Description: TODO
 * @author micoMo
 * @date 2017-4-28
 */
public class RedisTool {

    private static int maxActive = 100;
    private static int maxIdle = 20;
    private static int maxWait = 3000;
    private static String ip = "127.0.0.1";
    private static int port = 6379;
    private static JedisPool jedisPool;
    private static Jedis jedis;

    static {
        JedisPoolConfig config = new JedisPoolConfig();  
        //设置最大连接数
        config.setMaxActive(maxActive);
        //设置最大空闲数
        config.setMaxIdle(maxIdle);
        //设置超时时间
        config.setMaxWait(maxWait);

        //初始化连接池
        jedisPool = new JedisPool(config, ip, port);
        jedis = jedisPool.getResource();
//      jedis.auth("password");
    }

    /**
     * 向缓存中设置字符串内容
     * @param key key
     * @param value value
     * @return
     * @throws Exception
     */
    public static boolean  set(String key,String value) throws Exception{
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }

    /**
     * 向缓存中设置字符串内容
     * @param key key
     * @param value value
     * @return
     * @throws Exception
     */
    public static String get(String key){
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            String value = jedis.get(key);
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }

    /**
     * 向缓存中设置对象
     * @param key 
     * @param value
     * @return
     */
    public static boolean setObject(String key,Object value){
        Jedis jedis = null;
        try {
            JSONObject objectJson = JSONObject.fromObject(value);
            jedis = jedisPool.getResource();
            jedis.set(key, objectJson.toString());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }

    /**
     * 删除缓存中得对象,根据key
     * @param key
     * @return
     */
    public static boolean del(String key){
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.del(key);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }

    /**
     * 根据key 获取内容
     * @param key
     * @return
     */
    public static Object getObject(String key){
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            Object value = jedis.get(key);
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }


    /**
     * 根据key 获取对象
     * @param key
     * @return
     */
    public static <T> T get(String key,Class<T> clazz){
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            String value = jedis.get(key);
            JSONObject jsonobject = JSONObject.fromObject(value);
            return (T) JSONObject.toBean(jsonobject, clazz);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally{
            jedisPool.returnResource(jedis);
        }
    }


    public static void saveToken(String account,String token) {
        jedis.set(account, token);
        System.out.println(jedis.get(account));

    }

}

在用户登录时,初始化token,并保存到Redis。

    public String login() throws Exception{


        String account = request.getParameter("account");
        String password = request.getParameter("password");
        String deviceid = request.getParameter("deviceid");
        String channelId = request.getParameter("channelId");
        String os = request.getParameter("os");

        String[] param = {account,password,deviceid,channelId,os};
        String[] name = {"account","password","deviceid","channelId","os"};
        if(!"".equals(StringTool.isEmpty(param, name))){
            errorMessage += StringTool.isEmpty(param, name);
            resultCode = "0";
        }

        if ("" == errorMessage) {
            User u = userService.login(account, password);
            if(u == null){
                errorMessage += "账号未生效或用户名密码错误!";
                resultCode = "0";
            } else {
                u.setDeviceid(deviceid);
                u.setChannelId(channelId);
                u.setOs(os);
                userService.updateUser(u);
                //生成token
                String token = NumberTool.getRandomString(16);
                //保存token到Redis
                RedisTool.set(String.valueOf(u.getId()), token);
                System.out.println(RedisTool.get(String.valueOf(u.getId())));
                json.put("user", JSONObject.fromObject(u)); 
                json.put("token", token);
            }
        }

        json.put("errorMessage", errorMessage);
        json.put("resultCode", resultCode);
        ResponseTool.write(ServletActionContext.getResponse(), json);
        return null;
    }

验证token的过滤器

package com.sh.tools;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONObject;

/**
 * 接口token验证过滤器
 * ClassName: SecurityFilter 
 * @Description: TODO
 * @author micoMo
 * @date 2017-5-3
 */
public class SecurityFilter implements Filter {

    public void destroy() {
        // TODO Auto-generated method stub
    }

    public void doFilter(ServletRequest servletrequest,
            ServletResponse servletresponse, FilterChain filterchain)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) servletrequest;
        JSONObject json = new JSONObject();
        String myuserid = servletrequest.getParameter("myuserid");
        String sign = servletrequest.getParameter("sign");

        // 数组转换成list
        List<String> list = Arrays.asList(Constants.FILTERKEY);
        String path = httpRequest.getServletPath();

            if (list.contains(path)) {

                if(StringTool.isEmpty(myuserid)||StringTool.isEmpty(sign)){
                    json.put("errorMessage", "sign或myuserid为空");
                    json.put("resultCode", "0");
                } else {
                    //从Redis获取token
                    String token = RedisTool.get(myuserid);
                    sign = MD5Util.MD5Encode(sign, "UTF-8");
                    System.out.println("加密后的token:"+sign);
                    if(!sign.equals(MD5Util.MD5Encode(token, "UTF-8"))){    
                        json.put("errorMessage", "token验证失败");
                        json.put("resultCode", "0");
                    } else {
                        filterchain.doFilter(servletrequest, servletresponse);
                    }
                }
                servletresponse.setCharacterEncoding("GBK");
                PrintWriter out = servletresponse.getWriter();
                out.append(json.toString());
                out.close();

            } else {

                filterchain.doFilter(servletrequest, servletresponse);
            }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

以上只是实现简单的存储数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值