渐进式遍历
在平常的遍历中,keys一次性会把整个redis中的key都获取到,这个操作十分的危险,可能会一下子得到太多的key,从而阻塞服务器。
所以我们可以通过渐进式遍历,既可以得到key,又不会阻塞服务器
渐进式遍历其实是一组的命令
redis中Java的使用
jedis是一个 Java语言编写的 Redis 客户端库,用于让 Java 程序通过代码连接并操作 Redis 数据库
jedis在redis中的一些基本命令的使用
jedis中的普通命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;
import java.util.Set;
public class JedisDemoGeneral {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
// try的作用是用完会自动的关闭()中的资源,不需要你手动进行关闭
try(Jedis jedis=jedisPool.getResource()){
//在Jedis中的各种方法中,都对应着redis中的各种命令
// String pong=jedis.ping();
// System.out.println(pong);
// test1(jedis);
// test2(jedis);
// test3(jedis);
// test4(jedis);
test5(jedis);
}
}
public static void test5(Jedis jedis){
jedis.flushAll();
jedis.set("k1","11");
String k = jedis.type("k1");
System.out.println(k);
jedis.lpush("k2","12","22");
k=jedis.type("k2");
System.out.println(k);
jedis.hset("k5","hm","12");
k=jedis.type("k5");
System.out.println(k);
jedis.sadd("k3","2");
k=jedis.type("k3");
System.out.println(k);
jedis.zadd("k4",12,"ixaohei");
k=jedis.type("k4");
System.out.println(k);
}
public static void test4(Jedis jedis){
jedis.flushAll();
jedis.set("k","123");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
long k = jedis.ttl("k");
System.out.println(k);
}
public static void test3(Jedis jedis){
jedis.flushAll();
jedis.set("a","123");
jedis.set("b","555");
Set<String> keys = jedis.keys("*");
System.out.println(keys);
}
public static void test2(Jedis jedis){
System.out.println(" del和 exist");
jedis.set("key","123");
jedis.set("key2","1234");
boolean key = jedis.exists("key");
System.out.println(key);
// del中支持删除多个key
long key2 = jedis.del("key2");
System.out.println(key2);
boolean key3 = jedis.exists("key2");
System.out.println(key3);
}
public static void test1(Jedis jedis){
jedis.set("a","123");
jedis.set("b","555");
SetParams params=new SetParams();
params.ex(10);
params.xx();
jedis.set("a","888",params);
String ret1=jedis.get("a");
String ret2=jedis.get("b");
System.out.println(ret1);
System.out.println(ret2);
}
}
Jedis中的String类型的命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
public class JedisDemoString {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis=jedisPool.getResource()){
// test1(jedis);
// test2(jedis);
test3(jedis);
}
}
public static void test3(Jedis jedis){
jedis.flushAll();
jedis.set("k","213");
long k = jedis.incr("k");
String string = jedis.get("k");
System.out.println(k);
System.out.println(string);
k = jedis.decr("k");
String string1=jedis.get("k");
System.out.println(k);
System.out.println(string1);
}
public static void test2(Jedis jedis){
jedis.flushAll();
jedis.set("k","fdsfgdfs");
jedis.append("k","1111");
String s = jedis.get("k");
System.out.println(s);
}
public static void test1(Jedis jedis){
jedis.flushAll();
String k = jedis.mset("s", "1", "s2", "2", "s3", "3");
System.out.println(k);
jedis.set("k","dsfdssdfds");
String k1 = jedis.getrange("k", 2, 5);
System.out.println(k1);
jedis.setrange("k", 2, "ppp");
String s = jedis.get("k");
System.out.println(s);
}
}
Jedis中的List类型的命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
public class JedisDemoList {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis=jedisPool.getResource()){
// test1(jedis);
// test2(jedis);
// test3(jedis);
// test4(jedis);
// test5(jedis);
test6(jedis);
}
}
public static void test6(Jedis jedis){
jedis.flushAll();
jedis.lpush("k","111","222","333");
long k = jedis.llen("k");
System.out.println(k);
}
public static void test5(Jedis jedis){
jedis.flushAll();
// jedis.lpush("key","1");
List<String> key = jedis.blpop(100, "key");
System.out.println(key);
}
public static void test4(Jedis jedis){
jedis.flushAll();
jedis.lpush("k","111","222","333");
// 尾删
String k = jedis.rpop("k");
System.out.println(k);
k = jedis.rpop("k");
System.out.println(k);
k = jedis.rpop("k");
System.out.println(k);
k = jedis.rpop("k");
System.out.println(k);
System.out.println(jedis.get("k"));
}
public static void test3(Jedis jedis){
jedis.flushAll();
jedis.lpush("k","111","222","333");
// 头删
String k = jedis.lpop("k");
System.out.println(k);
k = jedis.lpop("k");
System.out.println(k);
k = jedis.lpop("k");
System.out.println(k);
k = jedis.lpop("k");
System.out.println(k);
System.out.println(jedis.get("k"));
}
public static void test2(Jedis jedis){
jedis.flushAll();
// 尾插
long k = jedis.rpush("k", "12", "21", "21", "44");
System.out.println(k);
List<String> k1 = jedis.lrange("k", 0, -1);
System.out.println(k1);
}
public static void test1(Jedis jedis){
jedis.flushAll();
// 头插
long k = jedis.lpush("k", "12", "21", "21", "44");
System.out.println(k);
List<String> k1 = jedis.lrange("k", 0, -1);
System.out.println(k1);
}
}
Jedis中的Hash类型的命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisDemoHash {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis=jedisPool.getResource()){
// test1(jedis);
// test2(jedis);
// test3(jedis);
// test4(jedis);
test5(jedis);
}
}
public static void test5(Jedis jedis){
jedis.flushAll();
jedis.hset("k","f1","111");
jedis.hset("k","f2","111");
jedis.hset("k","f3","111");
jedis.hset("k","f4","111");
List<String> hmget = jedis.hmget("k", "f1", "f2", "f3");
System.out.println(hmget);
}
public static void test4(Jedis jedis){
jedis.flushAll();
jedis.hset("k","f1","111");
jedis.hset("k","f2","111");
jedis.hset("k","f3","111");
jedis.hset("k","f4","111");
List<String> k1 = jedis.hvals("k");
Set<String> k = jedis.hkeys("k");
System.out.println(k1);
System.out.println(k);
}
public static void test3(Jedis jedis){
jedis.flushAll();
jedis.hset("k","f1","111");
jedis.hset("k","f2","111");
jedis.hset("k","f3","111");
jedis.hset("k","f4","111");
long hdel = jedis.hdel("k", "f1", "f2", "f4");
System.out.println(hdel);
boolean hexists = jedis.hexists("k", "f1");
System.out.println(hexists);
}
public static void test2(Jedis jedis){
jedis.flushAll();
jedis.hset("k","f1","111");
boolean hexists = jedis.hexists("k", "f1");
System.out.println(hexists);
boolean hexists1 = jedis.hexists("k", "f2");
System.out.println(hexists1);
}
public static void test1(Jedis jedis){
jedis.flushAll();
jedis.hset("k","f1","111");
Map<String,String> hashMap=new HashMap<>();
hashMap.put("f2","12");
hashMap.put("f3","13");
hashMap.put("f4","14");
hashMap.put("f5","15");
jedis.hset("k",hashMap);
String hget = jedis.hget("k", "f1");
System.out.println(hget);
hget = jedis.hget("k", "f2");
System.out.println(hget);
hget = jedis.hget("k", "f3");
System.out.println(hget);
hget = jedis.hget("k", "f4");
System.out.println(hget);
}
}
Jedis中的Set类型的命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class JedisDemoSet {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis=jedisPool.getResource()){
// test1(jedis);
// test2(jedis);
// test3(jedis);
test4(jedis);
}
}public static void test4(Jedis jedis){
jedis.flushAll();
jedis.sadd("k","111","222","333");
jedis.sadd("k2","333","222","888");
Set<String> sinter = jedis.sinter("k", "k2");
System.out.println(sinter);
long sinterstore = jedis.sinterstore("kk", "k", "k2");
System.out.println(sinterstore);
System.out.println(jedis.smembers("kk"));
}
public static void test3(Jedis jedis){
}
public static void test2(Jedis jedis){
jedis.flushAll();
jedis.sadd("k","111","222","333");
String k = jedis.spop("k");
System.out.println(k);
}
public static void test1(Jedis jedis){
jedis.flushAll();
jedis.sadd("k","111","222","333");
Set<String> k = jedis.smembers("k");
System.out.println(k);
boolean k1 = jedis.sismember("k", "111");
System.out.println(k1);
long k11 = jedis.scard("k");
System.out.println(k11);
}
}
Jedis中的ZSet类型的命令
package org.blame;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.resps.Tuple;
import java.util.List;
public class JedisDemoZSet {
public static void main(String[] args) {
JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis=jedisPool.getResource()){
// test1(jedis);
// test2(jedis);
// test3(jedis);
// test4(jedis);
test5(jedis);
}
}
public static void test5(Jedis jedis) {
jedis.flushAll();
jedis.zadd("k", 12, "zhangsan");
jedis.zadd("k", 13, "lisi");
jedis.zadd("k", 14, "xiaohei");
Long zrank = jedis.zrank("k", "xiaohei");
System.out.println(zrank);
}
public static void test4(Jedis jedis){
jedis.flushAll();
jedis.zadd("k",12,"zhangsan");
jedis.zadd("k",13,"lisi");
jedis.zadd("k",14,"xiaohei");
Double zscore = jedis.zscore("k", "zhangsan");
System.out.println(zscore);
}
public static void test3(Jedis jedis){
jedis.flushAll();
jedis.zadd("k",12,"zhangsan");
jedis.zadd("k",13,"lisi");
jedis.zadd("k",14,"xiaohei");
long zrem = jedis.zrem("k", "zhangsan", "lisi");
System.out.println(zrem);
}
public static void test2(Jedis jedis){
jedis.flushAll();
jedis.zadd("k",12,"zhangsan");
jedis.zadd("k",13,"lisi");
jedis.zadd("k",14,"xiaohei");
long k = jedis.zcard("k");
System.out.println(k);
}
public static void test1(Jedis jedis){
jedis.flushAll();
jedis.zadd("k",12,"zhangsan");
jedis.zadd("k",13,"lisi");
jedis.zadd("k",14,"xiaohei");
List<String> k = jedis.zrange("k", 0, -1);
System.out.println(k);
List<Tuple> k1 = jedis.zrangeWithScores("k", 0, -1);
System.out.println(k1);
double k2 = jedis.zrangeWithScores("k", 0, -1).get(0).getScore();
String k3 = jedis.zrangeWithScores("k", 0, -1).get(0).getElement();
System.out.println(k2);
System.out.println(k3);
}
}
redis中Java集成到Spring Boot
在Spring中为什么不用Jedis,而是用RedisTemplate
RedisTemplate 是 Spring Data Redis 提供的抽象封装,它比 Jedis 更适合在 Spring 框架中使用
RedisTemplate的优势对比
如何在spring中使用redis
引入redis的依赖
RedisTemplate使用
RedisTemplate是把各种类型的方法进行分类了
String类型的执行
@RestController
public class MyController {
@Autowired
private StringRedisTemplate redisTemplate;
@ResponseBody
@RequestMapping("/testString")
private String testString(){
redisTemplate.opsForValue().set("key","11");
redisTemplate.opsForValue().set("key2","22");
redisTemplate.opsForValue().set("key3","33");
String s = redisTemplate.opsForValue().get("key");
System.out.println(s);
return "";
}
List类型的执行
@RequestMapping("/testList")
@ResponseBody
public String testList(){
redisTemplate.execute((RedisConnection redisConnection)->{
redisConnection.serverCommands().flushAll();
return null;
});
redisTemplate.opsForList().leftPush("k","111");
redisTemplate.opsForList().leftPush("k","222");
redisTemplate.opsForList().leftPush("k","333");
String s = redisTemplate.opsForList().rightPop("k");
System.out.println(s);
return"";
}
Hash类型的执行
@RequestMapping("/testHash")
@ResponseBody
public String testHash(){
redisTemplate.execute((RedisConnection redisConnection)->{
redisConnection.serverCommands().flushAll();
return null;
});
redisTemplate.opsForHash().put("k2","f1","111");
redisTemplate.opsForHash().put("k2","f2","222");
redisTemplate.opsForHash().put("k2","f3","333");
Object o = redisTemplate.opsForHash().get("k2", "f1");
System.out.println(o);
Boolean b = redisTemplate.opsForHash().hasKey("k2", "f1");
System.out.println(b);
redisTemplate.opsForHash().delete("k2","f3","f1");
Long k2 = redisTemplate.opsForHash().size("k2");
System.out.println(k2);
return null;
}
Set类型的执行
@RequestMapping("/testSet")
@ResponseBody
public String testSet(){
redisTemplate.execute((RedisConnection redisConnection)->{
redisConnection.serverCommands().flushAll();
return null;
});
redisTemplate.opsForSet().add("k1","111","222","333");
Set<String> k1 = redisTemplate.opsForSet().members("k1");
System.out.println(k1);
Boolean k11 = redisTemplate.opsForSet().isMember("k1", "111");
System.out.println(k11);
Long k12 = redisTemplate.opsForSet().size("k1");
System.out.println(k12);
redisTemplate.opsForSet().remove("k1","222");
Set<String> k13 = redisTemplate.opsForSet().members("k1");
System.out.println(k13);
return"";
}
ZSet类型的执行
@RequestMapping("/testZSet")
@ResponseBody
public String testZSet(){
redisTemplate.execute((RedisConnection redisConnection)->{
redisConnection.serverCommands().flushAll();
return null;
});
redisTemplate.opsForZSet().add("k3","zhangsan",11);
redisTemplate.opsForZSet().add("k3","lsii",22);
redisTemplate.opsForZSet().add("k3","wangwu",33);
Set<String> key = redisTemplate.opsForZSet().range("key", 0, -1);
System.out.println(key);
Set<ZSetOperations.TypedTuple<String>> k3 = redisTemplate.opsForZSet().rangeWithScores("k3", 0, -1);
System.out.println(k3);
Double score = redisTemplate.opsForZSet().score("k3", "zhangsan");
System.out.println(score);
Long remove = redisTemplate.opsForZSet().remove("k3", "wangwu");
System.out.println(remove);
Long k31 = redisTemplate.opsForZSet().size("k3");
System.out.println(k31);
Long rank = redisTemplate.opsForZSet().rank("k3", "zhangsan");
System.out.println(rank);
return"";
}
希望能对大家有所帮助!!!!!