redis是一个key-value存储系统。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,数据都是缓存在内存中。
在二维码登录功能里面,我后来把uuid由
HashMap<String, UserLoginInfoVO> loginMap存储改成了redis来存储。
比如LongConnectionCheckServlet
// 检测登录 // UserLoginInfoVO userVo = LoginUser.getLoginMap().get(uuid); // System.out.println("userVo:" + userVo); // if (userVo != null) { // bool = false; // jsonStr = "{\"uname\":\"" + userVo.getUserName() + "\"}"; // LoginUser.getLoginMap().remove(uuid); // } else { // // if (new Date().getTime() - inTime > 5000) { // bool = false; // } // } if (jedis.get(uuid) != null) { bool = false; jsonStr = "{\"uname\":\"" + jedis.get(uuid) + "\"}"; jedis.del(uuid); } else { if (new Date().getTime() - inTime > 5000) { bool = false; } }
比如PhoneLoginServlet.java
if (bool) { // 将登陆信息存入map // UserLoginInfoVO userVo = LoginUser.getLoginMap().get(uuid); // if (userVo == null) { // userVo = new UserLoginInfoVO(); // userVo.setUserName(uname); // userVo.setUserPass(upwd); // LoginUser.getLoginMap().put(uuid, userVo); // } if (jedis.get(uuid) == null) { jedis.set(uuid, uname); System.out.println("redis 存储了:" + uuid + " " + uname); } }
我只存了uuid和name。反正省了很多代码而且效率提高~
spring下使用很简单:
pom.xml中添加 :
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.1</version> </dependency>
打开cmd,启动redis-server(我把redis文件解压在C盘redis文件夹中):
Redis Java String(字符串)实例
import redis.clients.jedis.Jedis; public class RedisStringJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); System.out.println("连接成功"); //设置 redis 字符串数据 jedis.set("hello", "lingzi"); // 获取存储的数据并输出 System.out.println("redis 存储的字符串为: "+ jedis.get("hello")); } }
编译后结果:
连接成功
redis 存储的字符串为: lingzi
Redis Java List(列表) 实例
import java.util.List; import redis.clients.jedis.Jedis; public class RedisJava { private static Jedis jedis; public static void main(String[] args) { // 连接本地的 Redis 服务 jedis = new Jedis("localhost"); System.out.println("连接成功"); // 存储数据到列表中 jedis.lpush("show", "ling"); jedis.lpush("show", "zi"); jedis.lpush("show", "hello"); jedis.lpush("show", "yaha"); // 获取存储的数据并输出 List<String> list = jedis.lrange("show", 0, 3); for (int i = 0; i < list.size(); i++) { System.out.println("列表项为: " + list.get(i)); } } }
编译后结果:
连接成功
列表项为: yaha
列表项为: hello
列表项为: zi
列表项为: ling
Redis Java Keys实例
import java.util.Iterator; import java.util.Set; import redis.clients.jedis.Jedis; public class RedisJava { private static Jedis jedis; public static void main(String[] args) { // 连接本地的 Redis 服务 jedis = new Jedis("localhost"); System.out.println("连接成功"); // 获取数据并输出 Set<String> keys = jedis.keys("*"); Iterator<String> it = keys.iterator(); while (it.hasNext()) { String key = it.next(); System.out.println(key); } } }
输出后结果:
连接成功
hello
show