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

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

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

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

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

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

 

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

1.mysql

 1 public class Mysql {
 2 
 3          public Connection conn;
 4 
 5          {
 6 
 7                  try {
 8 
 9                           Class.forName("com.mysql.jdbc.Driver");
10 
11                           conn=DriverManager.getConnection("jdbc:mysql://localhost/spring","root","root");
12 
13                  } catch (ClassNotFoundException e) {
14 
15                           e.printStackTrace();
16 
17                  } catch (SQLException e) {
18 
19                           e.printStackTrace();
20 
21                  }
22 
23          }
24 
25  
26 
27 }

 

2.redis

  1 public class Redis extends Jedis {
  2 
  3  
  4 
  5          public Jedis redis;
  6 
  7          {
  8 
  9                  redis = new Jedis("192.168.217.128", 6379);
 10 
 11                  redis.auth("root");
 12 
 13          }
 14 
 15  
 16 
 17          // public static void main(String[] args) {
 18 
 19          // System.out.println(redis.get("name"));
 20 
 21          // System.out.println(redis.keys("*"));
 22 
 23          // // redis.sinter(keys);
 24 
 25          // }
 26 
 27  
 28 
 29          public String get(String key) {
 30 
 31                  return redis.get("name");
 32 
 33          }
 34 
 35  
 36 
 37          public String set(String key, String value) {
 38 
 39                  return redis.set(key, value);
 40 
 41          }
 42 
 43  
 44 
 45          public Long del(String... keys) {
 46 
 47                  return redis.del(keys);
 48 
 49          }
 50 
 51  
 52 
 53          // 键值增加字符
 54 
 55          public Long append(String key, String str) {
 56 
 57                  return redis.append(key, str);
 58 
 59          }
 60 
 61  
 62 
 63          public Boolean exists(String key) {
 64 
 65                  return redis.exists(key);
 66 
 67          }
 68 
 69  
 70 
 71          // Need research
 72 
 73          public Long setnx(String key, String value) {
 74 
 75                  return redis.setnx(key, value);
 76 
 77          }
 78 
 79  
 80 
 81          public String setex(String key, String value, int seconds) {
 82 
 83                  return redis.setex(key, seconds, value);
 84 
 85          }
 86 
 87  
 88 
 89          public Long setrange(String key, String str, int offset) {
 90 
 91                  return redis.setrange(key, offset, str);
 92 
 93          }
 94 
 95  
 96 
 97          public List<String> mget(String... keys) {
 98 
 99                  return redis.mget(keys);
100 
101          }
102 
103  
104 
105          public String mset(String... keys) {
106 
107                  return redis.mset(keys);
108 
109          }
110 
111  
112 
113          public Long msetnx(String... keysvalues) {
114 
115                  return redis.msetnx(keysvalues);
116 
117          }
118 
119  
120 
121          public String getset(String key, String value) {
122 
123                  return redis.getSet(key, value);
124 
125          }
126 
127  
128 
129          public String hmset(String key, Map<String, String> hash) {
130 
131                  return redis.hmset(key, hash);
132 
133          }
134 
135  
136 
137          public Map<String, String> hgetall(String key) {
138 
139                  return redis.hgetAll(key);
140 
141          }
142 
143  
144 
145          public String hget(final String key, final String field) {
146 
147                  return redis.hget(key, field);
148 
149          }
150 
151  
152 
153          public Long hset(final String key, final String field, final String value) {
154 
155                  return redis.hset(key, field, value);
156 
157          }
158 
159  
160 
161          public Long expire(final String key, final int seconds) {
162 
163                  return redis.expire(key, seconds);
164 
165          }
166 
167  
168 
169          public Boolean hexists(final String key, final String field) {
170 
171                  return redis.hexists(key, field);
172 
173          }
174 
175  
176 
177 }

 

3.二、逻辑具体实现:

 1 public class Main {
 2 
 3          Mysql mysql=new Mysql();
 4 
 5          Redis redis=new Redis();
 6 
 7          ResultSet rs=null;
 8 
 9         
10 
11          //模拟登陆缓存
12 
13          @Test
14 
15          public void redisLogin() throws SQLException{
16 
17                  //正常业务的ID是通过UI的request.getParamenter()获取
18 
19                  String id="9028935b527d22cc01527d235aea0142";
20 
21                  String sql="select * from user where id_='"+id+"'";
22 
23                  String username;
24 
25                  if(redis.hexists("user_"+id, "username_")){
26 
27                           username=redis.hget("user_"+id, "username_");
28 
29                           System.out.println("Welcome Redis! User "+username+" login success");
30 
31                  }else{
32 
33                           rs=mysql.conn.createStatement().executeQuery(sql);
34 
35                           if(rs.next()==false){
36 
37                                    System.out.println("Mysql no register, Please register first");
38 
39                           }else{
40 
41                                    username=rs.getString("username_");
42 
43                                    System.out.println("Welcome Mysql ! User "+username+" login success");
44 
45                                    redis.hset("user_"+id, "username_", username);
46 
47                                    //30分钟未操作就过期
48 
49                                    redis.expire("user_"+id, 1800);
50 
51                           }
52 
53                  }
54 
55                 
56 
57          }
58 
59 }

 

 

posted on 2016-11-06 03:51  Sharpest  阅读(9363)  评论(0编辑  收藏  举报