1. java连接redis
1.1 java连接单机redis
首先创建一个普通的maven工程
(1)引入依赖
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.8.0</version>
</dependency>
</dependencies>
(2)测试
public class demo1 {
public static void main(String[] args) {
//String数据类型
// redisString();
//hash数据类型
// redisHash();
//List<列表>数据类型
Jedis jedis = new Jedis("172.16.7.220",6379);
}
private static void redisHash() {
Jedis jedis = new Jedis("172.16.7.220",6379);
jedis.select(1);
jedis.hset("k1","name","syf");
HashMap<String,String> map = new HashMap<>();
map.put("name","ljh");
map.put("age","18");
map.put("address","shanghai");
Long k2 = jedis.hset("k2", map);//将哈希表 key 中的字段 field 的值设为 value hget key field: 获取存储在哈希表中指定字段的值。
Map<String, String> all = jedis.hgetAll("k2");//获取在哈希表中指定 key 的所有字段和值
Set<String> k21 = jedis.hkeys("k2");//获取所有哈希表中的字段
Long k1 = jedis.hdel("k2","name");//删除一个或多个哈希表字段
System.out.println(k1);
}
private static void redisString() {
//把所有关于对redis的操作都封装到一个类中Jedis
//Jedis jedis = new Jedis();//无参构造函数,默认连接的是本地的redis,而且端口6379
Jedis jedis = new Jedis("172.16.7.220",6379);
// System.out.println(jedis.ping());//测试连通性 pong则为连通
//String类型的redis数据测试
// String s = jedis.flushAll(); //清空当前redis库的数据
// String select = jedis.select(0); //切换redis的数据库
String set = jedis.set("k1", "v1"); //设置k1,v1
String mset = jedis.mset("k1","v2","k2","v2","k4","4"); //设置多个k1,v1
Long setnx = jedis.setnx("k1", "v1");//判断如果k1不存在的添加返回1,存在不添加返回0
Set<String> keys = jedis.keys("*"); //获取所有的key
String setex = jedis.setex("k3", 5L, "v3");//设置过期时间
// Long del = jedis.del("k1", "k2");//删除key
String k1 = jedis.get("k1");//获取k1的值
Long k4 = jedis.incr("k4");//对指定的key的value值进行递增。key对应的value必须为整型字符串
Long decr = jedis.decrBy("k4", 2L);//按照number值进行递增
System.out.println(decr);
jedis.close();
}
}
特点: Jedis把对redis的操作都封装到Jedis类对象中了,而每个命令封装了一个对应的方法。
1.2 java通过连接池连接redis
连接池的作用: 减少频繁创建和销毁连接对象。
public class demo2 {
public static void main(String[] args) {
//配置连接对象信息
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMinIdle(5);//设置最小的空闲数
poolConfig.setMaxIdle(10);//当没人连接redis服务器是,该池子最多能空闲几个连接对象
poolConfig.setMaxTotal(15);//当有人连接redis服务时,最大能生成多少个连接对象
//创建连接池对象
JedisPool jedisPool = new JedisPool(poolConfig,"172.16.7.220",6379);
long start = System.currentTimeMillis();
//从连接池获取连接对象
for (int i = 0; i < 1000; i++) {
Jedis jedis = jedisPool.getResource();
jedis.ping();
jedis.close();
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
1.3 java连接redis集群
public class demo4 {
public static void main(String[] args) {
HostAndPort hostAndPort1=new HostAndPort("172.16.7.220",7001);
HostAndPort hostAndPort2=new HostAndPort("172.16.7.220",7002);
HostAndPort hostAndPort3=new HostAndPort("172.16.7.220",7003);
HostAndPort hostAndPort4=new HostAndPort("172.16.7.220",7004);
HostAndPort hostAndPort5=new HostAndPort("172.16.7.220",7005);
HostAndPort hostAndPort6=new HostAndPort("172.16.7.220",7006);
Set<HostAndPort> sets=new HashSet<>();
sets.add(hostAndPort1);
sets.add(hostAndPort2);
sets.add(hostAndPort3);
sets.add(hostAndPort4);
sets.add(hostAndPort5);
sets.add(hostAndPort6);
JedisCluster jedisCluster=new JedisCluster(sets);
jedisCluster.set("k1","v1");
jedisCluster.set("k2","v2");
jedisCluster.set("k3","v3");
jedisCluster.set("k4","v4");
jedisCluster.set("k5","v5");
jedisCluster.set("k6","v6");
jedisCluster.set("k7","v7");
jedisCluster.close();
}
}
2. springboot整合redis.
springboot对redis的操作封装到模板类中RedisTemplate和StringRedisTemplate。StringRedisTemplate是Redistemplate的子类,它只能往redis中存放字符串类型。
(1)创建一个Springboot工程
(2)引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.aaa</groupId>
<artifactId>redis-springboot-01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>redis-springboot-01</name>
<description>redis-springboot-01</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
(2)配置信息
#redis的配置信息--单机
spring.redis.host=192.168.223.147
spring.redis.port=6379
(3)测试
@SpringBootTest
class RedisSpringboot01ApplicationTests {
//springboot 创建好该类对象 并交于IOC容器管理
@Autowired
private StringRedisTemplate redisTemplate;
@Test
void contextLoads() {
// Boolean k1 = redisTemplate.hasKey("k1");//判断k存不存在
// System.out.println("判断k1是否存在:"+k1);
// Boolean k2 = redisTemplate.delete("k2");//删除指定的k
// System.out.println("k2是否删除成功:"+k2);
// Set<String> keys = redisTemplate.keys("*");//得到所有的k
// System.out.println(keys);
//字符串的操作--redisTemplate类中对于每一种数据类型的操作,单独封装了响应的类
ValueOperations<String, String> forValue = redisTemplate.opsForValue();
// Integer append = forValue.append("k1", "v5");//追加字符串功能
// forValue.set("k8","v8");//设置值
// String k8 = forValue.get("k8");//获取k对应的value
// Boolean absent = forValue.setIfAbsent("k9", "v9");//如果k不存在则添加,存在则返回false
// Boolean k9 = forValue.setIfPresent("k9","v100");//如果k存在就覆盖,不存在就添加
// HashMap<String, String> map = new HashMap<>();
// map.put("k6","v6");
// map.put("k7","v7");
// map.put("k8","v8");
// map.put("k9","v9");
// forValue.multiSet(map);
// ArrayList<String> list = new ArrayList<>();
// list.add("k6");
// list.add("k7");
// list.add("k8");
// list.add("k9");
// List<String> strings = forValue.multiGet(list);
// System.out.println(strings);
//hash类型操作
HashOperations<String, Object, Object> opsForHash = redisTemplate.opsForHash();
Object o = opsForHash.get("k1", "name");//获取字段的值
opsForHash.put("k3","name","yuhail");//存放数据
Set<Object> set = opsForHash.keys("k2");//获取k的所有字段
Map<Object, Object> k2 = opsForHash.entries("k2");//获取所有的字段和value值
System.out.println(set);
System.out.println(k2);
HashMap<String, String> map = new HashMap<>();//批量添加hash数据
map.put("name","asfd");
map.put("addr","v7");
map.put("age","v8");
map.put("sex","v9");
opsForHash.putAll("k4",map);
}
}