java中使用redis缓存数据库操作
开始在 Java 中使用 Redis 前, 首先需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。安装配置Redis:
maven配置如下
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
使用Jedis连接并测试
import org.junit.Test; import redis.clients.jedis.Jedis; import java.util.*; /** * @author: dx * @date:2019-03-26 */ public class RedisJava { private static Jedis jedis; static { // 连接本地redis服务 jedis = new Jedis("localhost"); } // Redis Java String(字符串) 实例 @Test public void testString(){ // 设置redis字符串数据 jedis.set("top", "this is test on redis ..."); jedis.set("name", "lw"); // 获取存储数据并输出 System.out.printf("top 的数据为: %s\n", jedis.get("top")); System.out.printf("name 的数据为: %s\n", jedis.get("name")); // 追加字符 jedis.append("name", " 这是我的英文名字缩写!"); System.out.println("name >> " + jedis.get("name")); // 删除键 Long result = jedis.del("top"); System.out.println(result > 0 ? "删除 top 成功!" : "删除 top 失败!"); // 1表示成功, 0表示失败。 // 设置多个键值对 jedis.mset("age", "13", "addr", "上海市"); System.out.println(jedis.mget("name", "age", "addr")); } // Redis Java List(列表) 实例 @Test public void testList(){ // 存储数据到redis的list中 jedis.lpush("c-list", "china"); jedis.lpush("c-list", "Google"); jedis.lpush("c-list", "Taobao"); // 获取数据并遍历输出 //你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 List<String> list = jedis.lrange("c-list",0, -1); for (String clist : list) { System.out.printf("list in redis name c-list: %s\n", clist); } // lpushx key value 将一个值插入到已存在的列表头部 jedis.lpushx("c-list", "tongren"); System.out.println(jedis.lrange("c-list", 0, -1)); //rpush key value1 [value2] 在列表中添加一个或多个值 jedis.rpush("c-list", "lw", "dx"); System.out.println(jedis.lrange("c-list", 0, -1)); } // Redis java Set @Test public void testSet() { // 获取数据并输出 Set<String> keys = jedis.keys("*"); Iterator<String> it = keys.iterator(); while (it.hasNext()) { String key = it.next(); System.out.println(key); } //向集合添加一个或多个成员 jedis.sadd("webSite", "阿里巴巴", "腾讯"); jedis.sadd("webSite", "网易"); //SCARD key 获取集合的成员数 System.out.println(jedis.scard("webSite")); //SMEMBERS key 返回集合中的所有成员 返回类型列表[阿里巴巴, 腾讯, 网易]注意顺序不唯一 System.out.println(jedis.smembers("webSite")); //SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素 System.out.println(jedis.sscan("webSite", 0)); } // Redis java Hash @Test public void testHash() { Map<String, String> map = new HashMap<>(); map.put("name", "lw"); map.put("age", "22"); // hmset 将 map 存入redis中 jedis.hmset("user", map); // hmget 读取map数据 System.out.println(jedis.hmget("user", "name", "age")); // hkeys 读取 map 中的所有 keys System.out.println(jedis.hkeys("user")); // hvals 读取 map 中的所有 value System.out.println(jedis.hvals("user")); // hlen 获取 map 中的有多少个字段 System.out.println(jedis.hlen("user")); //获取所有的键 迭代操作 Iterator<String> iterator = jedis.hkeys("user").iterator(); while(iterator.hasNext()){ String key = iterator.next(); System.out.println(key + " : " + jedis.hmget("user", key)); } } //sorted set有序Set @Test public void testSortSet() { // Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 // 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 // 有序集合的成员是唯一的,但分数(score)却可以重复。 jedis.zadd("city", 0, "北京"); jedis.zadd("city", 1, "上海"); jedis.zadd("city", 1, "上海2"); jedis.zadd("city", 2, "杭州"); //ZCARD key 获取有序集合的成员数 System.out.println( jedis.zcard("city") ); //ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 java中的方法是zrevrangeByScore //2指的是最大的分数 Set<String> a = jedis.zrevrangeByScore("city", 2, 0); System.out.println( a ); } }