Jedis是Java开发Redis的语言工具包
Jedis是对Redis语言的封装
Jedis演示
Jedis jedis = new Jedis("175.27.230.117", 6379);
try {
jedis.auth("12345");
jedis.select(2);
System.out.println("Redis连接成功");
// String类型
jedis.set("sn", "7781-9938");
String sn = jedis.get("sn");
System.out.println(sn);
jedis.mset(new String[]{"title", "奶粉", "num", "20"});
List<String> goods = jedis.mget(new String[]{"sn", "title", "num"});
System.out.println(goods);
Long num = jedis.incr("num");
System.out.println(num);
//HASH 类型
jedis.hset("student:3312", "name", "张晓明");
String name = jedis.hget("student:3312", "name");
System.out.println(name);
Map<String, String> studentMap = new HashMap<>();
studentMap.put("name", "李兰");
studentMap.put("age", "18");
jedis.hmset("student:3313", studentMap);
Map<String, String> smap = jedis.hgetAll("student:3313");
System.out.println(smap);
// List类型
jedis.del("letter");
jedis.rpush("letter", new String[]{"d", "e", "f"});
jedis.lpush("letter", new String[]{"c", "b", "a"});
List<String> letter = jedis.lrange("letter", 0, -1);
System.out.println(letter);
jedis.lpop("letter");
jedis.rpop("letter");
letter = jedis.lrange("letter", 0, -1);
System.out.println(letter);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
输出结果:
Redis持久化策略
Redis持久化策略,他会把数据化持久化到磁盘上,当启动Redis后可以从磁盘将数据加载到内存中,然后在内存中读取数据,实现Redis持久化策略有两种方式:
- RDB(数据快照模式),定期存储,保存的是数据本身,存储文件是紧凑的。当服务器启动的时候,可以从RDB文件中恢复数据集。
- AOF(追加模式),每次修改数据是,同步到硬盘(写操作日志),保存的是数据的变更记录。在服务器重新启动的时候,会把所有的写操作重新执行一边,从而实现数据备份。当写操作数据集过大(比原有的数据集还大),Redis会重写写操作集。
ZRANGE和ZRANGEBYSCORE的区别
- ZRANGE的语法是ZRANGE key start stop [WITHSCORES], 表示返回有续集和key中指定区间的成员。比如:返回指定范围中的成员,如图:
- ZRANGEBYSCORE的语法是ZRANGEBYSCORE key min max, 表示返回有续集key中,所有score值介于min和max之间(包括等于min或max)的成员。例如:查看score值在100到103之间的元素:
MySQL和Redis的使用场景
-
Reids作为一个内存数据库,读取写入速度是非常快的,所以经常被用来存储数据、页面等的缓存的内容。
- MySQL如果每次提取都要读取MySQL存储在磁盘的数据,比较慢。如:在需要读取大量数据时(获得大量帖子或新闻),就可以使用Redis读取到数据。在内存中,Redis将MySQL中的数据获取到,然后之间从Redis读取数据,效率比较快.
- 综上:MySQL和Redis在处理大量读取数据操作时,一般是配合使用。MySQL是将数据放在磁盘中,Redis是将数据放在内存中,便于快速读取.
Redis做缓存举例:
package com.imooc.jedis;
import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CacheSample {
public CacheSample() {
List<Goods> goodsList = new ArrayList<Goods>();
goodsList.add(new Goods(8818, "红富士苹果", "", 3.5f));
goodsList.add(new Goods(8819, "进口脐橙", "", 5f));
goodsList.add(new Goods(8820, "香蕉", "", 25f));
Jedis jedis = new Jedis("175.27.230.117", 6379);
try {
jedis.auth("12345");
jedis.select(3);
for (Goods goods : goodsList) {
String json = JSON.toJSONString(goods);
System.out.println(json);
String key = "goods:" + goods.getGoodsId();
jedis.set(key, json);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
public static void main(String[] args) {
new CacheSample();
System.out.println("请输入要查询的商品编号:");
String goodsId = new Scanner(System.in).next();
Jedis jedis = new Jedis("175.27.230.117", 6379);
try {
jedis.auth("12345");
jedis.select(3);
String key = "goods:" + goodsId;
if (jedis.exists(key)) {
String json = jedis.get(key);
System.out.println(json);
Goods g = JSON.parseObject(json, Goods.class);
System.out.println(g.getGoodsName());
System.out.println(g.getPrice());
} else {
System.out.println("您输入的商品编号不存在,请重新输入!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
/**
* 存在内存中,内存读取数独远远大于硬盘读取速度
* 缓存特性:数据不能太大, 更新频率低
*/
}
结果查询: