Redis缓存Mysql模拟用户登录Java实现实例

47 篇文章 0 订阅
41 篇文章 0 订阅

这段时间在研究Redis,作为缓存界的新宠,现在使用它的公司越来越多。本文使用的是最新稳定版Redis3.0.实现的具体逻辑是:

    1. 用户登录首先判断是否在redis缓存中,如果在redis缓存中,直接登录成功;

    2. 若用户未在redis缓存,则访问Mysql,判断用户是否存在,如果不存在,则提示用户注册;如果存在,则登录成功;

    3. 在mysql存在并登录成功的同时,将改条数据用Redis Hash类型进行缓存,并设置过期时间为30分钟;

    4. 设置redis最大内存,若超出内存范围,则使用FIFO方式进行清除。

本文实现方式为最简单的模拟方式,有的代码有进一步封装得必要。

工具/原料

  • Redis,Mysql
  • Java

方法/步骤

  1. 一、首先创建两个类,一个类连接Mysql,一个类连接Redis,并复写相关方法:

    public class Mysql {

             public Connection conn;

             {

                     try {

                              Class.forName("com.mysql.jdbc.Driver");

                              conn=DriverManager.getConnection("jdbc:mysql://localhost/spring","root","root");

                     } catch (ClassNotFoundException e) {

                              e.printStackTrace();

                     } catch (SQLException e) {

                              e.printStackTrace();

                     }

             }

     

    }

    public class Redis extends Jedis {

     

             public Jedis redis;

             {

                     redis = new Jedis("192.168.217.128", 6379);

                     redis.auth("root");

             }

     

             // public static void main(String[] args) {

             // System.out.println(redis.get("name"));

             // System.out.println(redis.keys("*"));

             // // redis.sinter(keys);

             // }

     

             public String get(String key) {

                     return redis.get("name");

             }

     

             public String set(String key, String value) {

                     return redis.set(key, value);

             }

     

             public Long del(String... keys) {

                     return redis.del(keys);

             }

     

             // 键值增加字符

             public Long append(String key, String str) {

                     return redis.append(key, str);

             }

     

             public Boolean exists(String key) {

                     return redis.exists(key);

             }

     

             // Need research

             public Long setnx(String key, String value) {

                     return redis.setnx(key, value);

             }

     

             public String setex(String key, String value, int seconds) {

                     return redis.setex(key, seconds, value);

             }

     

             public Long setrange(String key, String str, int offset) {

                     return redis.setrange(key, offset, str);

             }

     

             public List<String> mget(String... keys) {

                     return redis.mget(keys);

             }

     

             public String mset(String... keys) {

                     return redis.mset(keys);

             }

     

             public Long msetnx(String... keysvalues) {

                     return redis.msetnx(keysvalues);

             }

     

             public String getset(String key, String value) {

                     return redis.getSet(key, value);

             }

     

             public String hmset(String key, Map<String, String> hash) {

                     return redis.hmset(key, hash);

             }

     

             public Map<String, String> hgetall(String key) {

                     return redis.hgetAll(key);

             }

     

             public String hget(final String key, final String field) {

                     return redis.hget(key, field);

             }

     

             public Long hset(final String key, final String field, final String value) {

                     return redis.hset(key, field, value);

             }

     

             public Long expire(final String key, final int seconds) {

                     return redis.expire(key, seconds);

             }

     

             public Boolean hexists(final String key, final String field) {

                     return redis.hexists(key, field);

             }

     

    }

  2. 二、逻辑具体实现:

    public class Main {

             Mysql mysql=new Mysql();

             Redis redis=new Redis();

             ResultSet rs=null;

            

             //模拟登陆缓存

             @Test

             public void redisLogin() throws SQLException{

                     //正常业务的ID是通过UI的request.getParamenter()获取

                     String id="9028935b527d22cc01527d235aea0142";

                     String sql="select * from user where id_='"+id+"'";

                     String username;

                     if(redis.hexists("user_"+id, "username_")){

                              username=redis.hget("user_"+id, "username_");

                              System.out.println("Welcome Redis! User "+username+" login success");

                     }else{

                              rs=mysql.conn.createStatement().executeQuery(sql);

                              if(rs.next()==false){

                                       System.out.println("Mysql no register, Please register first");

                              }else{

                                       username=rs.getString("username_");

                                       System.out.println("Welcome Mysql ! User "+username+" login success");

                                       redis.hset("user_"+id, "username_", username);

                                       //30分钟未操作就过期

                                       redis.expire("user_"+id, 1800);

                              }

                     }

                    

             }

    }

  3. 以下是运行结果截图:

    Redis缓存Mysql模拟用户登录Java实现实例
    Redis缓存Mysql模拟用户登录Java实现实例
    Redis缓存Mysql模拟用户登录Java实现实例
    Redis缓存Mysql模拟用户登录Java实现实例
  4. 4

    三、 设置最大内存:

    在redis.conf文件中找到并设置即可:

     maxmemory  10240000

来自:http://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值