1,Jedis
在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/
1.1 导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.8.0</version>
</dependency>
1.2 jedis操作string
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
public class Demo01_Jedis_String {
public static void main(String[] args) {
Jedis jedis = setUp();
String result = jedis.set("name", "小明");
System.out.println("result= " + result);
String name = jedis.get("name");
System.out.println("name= "+name);
if(jedis!=null){
jedis.close();
}
}
public static Jedis setUp(){
//1.建立连接
Jedis jedis = new Jedis("127.0.0.1",6379);
//3.选择库
jedis.select(0);
return jedis;
}
}
1.3 jedis操作hash
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class Demo02_Jedis_Hash {
public static void main(String[] args) {
Jedis jedis = setUp();
jedis.hset("user","name","jack");
jedis.hset("user","age","21");
Map<String, String> map = jedis.hgetAll("user");
System.out.println(map);
if(jedis!=null){
jedis.close();
}
}
public static Jedis setUp(){
//1.建立连接
Jedis jedis = new Jedis("127.0.0.1",6379);
//3.选择库
jedis.select(0);
return jedis;
}
}
1.4 jedis操作List
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
public class Demo03_Jedis_List {
public static void main(String[] args) {
Jedis jedis = setUp();
jedis.lpush("listDemo","linailong1","linailong2");
List<String> users = jedis.lrange("listDemo", 0, -1);
System.out.println(users.size());
for (String user : users) {
System.out.println(user);
}
if(jedis!=null){
jedis.close();
}
}
public static Jedis setUp(){
//1.建立连接
Jedis jedis = new Jedis("127.0.0.1",6379);
//3.选择库
jedis.select(0);
return jedis;
}
}
1.5 jedis操作set
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Demo04_Jedis_Set {
public static void main(String[] args) {
Jedis jedis = setUp();
jedis.sadd("setDemo","linailong1","linailong2","linailong3","linailong3");
Set<String> setDemo = jedis.smembers("setDemo");
System.out.println(setDemo);
if(jedis!=null){
jedis.close();
}
}
public static Jedis setUp(){
//1.建立连接
Jedis jedis = new Jedis("127.0.0.1",6379);
//3.选择库
jedis.select(0);
return jedis;
}
}
1.6 jedis操作sortedset
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
import java.util.Set;
public class Demo05_Jedis_SortedSet {
public static void main(String[] args) {
Jedis jedis = setUp();
jedis.zadd("SortedSetDemo",25,"linailong");
jedis.zadd("SortedSetDemo",24,"liujuan");
jedis.zadd("SortedSetDemo",15,"王符文");
Set<String> sortedSetDemo = jedis.zrange("SortedSetDemo", 0, -1);
System.out.println(sortedSetDemo);
if(jedis!=null){
jedis.close();
}
}
public static Jedis setUp(){
//1.建立连接
Jedis jedis = new Jedis("127.0.0.1",6379);
//3.选择库
jedis.select(0);
return jedis;
}
}
1.7 jedis连接池
-
JedisConnectionFacotry:工厂设计模式是实际开发中非常常用的一种设计模式,我们可以使用工厂,去降低代的耦合,比如Spring中的Bean的创建,就用到了工厂设计模式
-
静态代码块:随着类的加载而加载,确保只能执行一次,我们在加载当前工厂类的时候,就可以执行static的操作完成对 连接池的初始化
-
最后提供返回连接池中连接的方法.
package com.study.redisDemo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
public class Demo06_Jedis_Pool {
private static final JedisPool jedisPool;
static{
//配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8);
poolConfig.setMaxIdle(8);
poolConfig.setMinIdle(0);
poolConfig.setMaxWait(Duration.ofMillis(1000));
jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000);
}
public static void main(String[] args)throws Exception {
Jedis jedis = getJedis();
String result = jedis.set("name", "小明");
System.out.println("result= " + result);
String name = jedis.get("name");
System.out.println("name= "+name);
if(jedis!=null){
jedis.close();
}
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
2,SpringDataRedis
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis
- 提供了对不同Redis客户端的整合(Lettuce和Jedis)
- 提供了RedisTemplate统一API来操作Redis
- 支持Redis的发布订阅模型
- 支持Redis哨兵和Redis集群
- 支持基于Lettuce的响应式编程(Lettuce之前实在es那里有)
- 支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化
- 支持基于Redis的JDKCollection实现
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
2.1 导入依赖
<!--Redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<!--连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
2.2 配置文件
server:
port: 18082
spring:
application:
name: springboot_redis
redis:
host: 127.0.0.1
port: 6379
database: 0
lettuce:
pool:
max-active: 8 #最大连接数
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
#连接等待时间
max-wait: 100
2.3 redisTemplate操作String
@Autowired
RedisTemplate redisTemplate;
@GetMapping("redisString")
private void redisString(){
redisTemplate.opsForValue().set("person","linailong");
String person = redisTemplate.opsForValue().get("person").toString();
System.out.println(person);
}
2.4 redisTemplate操作Hash
@GetMapping("redisHash")
private void redisHash(){
redisTemplate.opsForHash().put("user","name","linailong");
redisTemplate.opsForHash().put("user","age",25);
redisTemplate.opsForHash().put("user","hoddy","java,golang");
Object hoddy = redisTemplate.opsForHash().get("user","hoddy");
System.out.println(hoddy);
Object user = redisTemplate.opsForHash().values("user");
System.out.println(user);
}
2.5 redisTemplate操作List
@GetMapping("redisList")
private void redisList(){
redisTemplate.opsForList().leftPush("listDemo","linailong1");
redisTemplate.opsForList().leftPush("listDemo","linailong2");
redisTemplate.opsForList().leftPush("listDemo","linailong3");
List<String> persons = redisTemplate.opsForList().range("listDemo", 0, -1);
for (String person : persons) {
System.out.println(person);
}
}
2.6 redisTemplate操作Set
@GetMapping("redisSet")
private void redisSet(){
redisTemplate.opsForSet().add("zsetDemo","linailong1","linailong2","linailong3","linailong3");
Set zsetDemo = redisTemplate.opsForSet().members("zsetDemo");
System.out.println(zsetDemo);
}
2.7 redisTemplate操作Zset
@GetMapping("redisZset")
private void redisZset(){
redisTemplate.opsForZSet().add("zsetDemo","linailong",25);
redisTemplate.opsForZSet().add("zsetDemo","liujuan",24);
redisTemplate.opsForZSet().add("zsetDemo","wangfuwen",15);
Set zsetDemo = redisTemplate.opsForZSet().range("zsetDemo", 0, -1);
System.out.println(zsetDemo);
}