redis简单来讲是内存数据库,因为是将数据存放到内存,因此读写速率高快(传统数据库,不是先从内存转到硬存,慢)
redis是java操作redis的客户端,通过他我们能通过java语句操控redis。
jedis对于redis,相对于jdbc对于mysql。(底层)
本笔记采用,md由于底层几乎没人用,因此导入springboot依赖,外加springboot整合redis依赖即可。
springboot1.0x 默认采用的连接池技术是jedis
2.0 以上版本连接池是Lettuce
org.springframework.boot
spring-boot-starter-data-redis
io.lettuce
lettuce-core
redis.clients
jedis
Jedis jedis = new Jedis("192.168.88.135",6379);
// 设置认证密码
jedis.auth("123456");
// 选择数据库
jedis.select(0);
System.out.println(jedis.ping());
// 设置string键值
jedis.set("name","qhx");
String name = jedis.get("name");
if (jedis != null){
jedis.close();
}
看的出,穿件jedis对象之后,发现他默认封装的方法api就是redis的指令。
看的出跟mysql数据库连接池一样。
1.创建 数据库连接池对象,封装jedisconfig配置,以及数据库密码,端口号、redisIP
2.由数据库连接池对象创建数据库对象
PS:由jedisPool创建jedis对象,不能设置密码,ip之类的。
// 初始化jedis连接池对象
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "192.168.88.135", 6379, 10000, "123456");
// 从数据库连接器获取redis对象
Jedis jedis = jedisPool.getResource();
jedis.select(2);
// 使用ping命令测试连接成功
System.out.println(jedis.ping());
jedis.set("name","qhx");
jedis.get("name");
if(jedis !=null){
jedis.close();
jedisPool.close();
}
理解Mysql一样,就是将数据库连接池,你肯定要连接一次吧?创建多次数据库连接池,浪费资源。就是静态实例,你是由一个数据库连接池对象,能创建多个数据库连接对象。
那就是把他封装一个静态工厂之类的,但是这样写不太高级,那就将他讲给spring管控,也就是第三方bean。默认单例化对象。
将配置信息写在application.yml,方便以后集中管控。
application.yml
spring:
redis:
password: 123456
# 默认0库
database: 0
#连接超时时间
timeout: 10000ms
port: 6379
host: 192.168.88.135
jedis:
pool:
# 设置最大连接数
max-active: 1024
# 最大阻塞时间
max-wait: 10000ms
# 最大空间连接,默认8
max-idle: 200
# 最小空间连接,默认5
min-idle: 4
Redis.config
遇到的问题:
注意白色是字符串,蓝色的是number,读取时一定不要弄错了
@Configuration
public class RedisConfig {
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private String maxWaitMillis;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxTotal;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.timeout}")
private String timeout;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private int database;
@Bean /** 返回jedis连接池*/
public JedisPool getJedisPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 设置最大连接数
jedisPoolConfig.setMaxTotal(maxTotal);
// 设置最大空间连接
jedisPoolConfig.setMaxIdle(maxIdle);
// 设置最小空间连接
jedisPoolConfig.setMinIdle(minIdle);
// 设置最大阻塞时间(注意是个10000ms字符串)
jedisPoolConfig.setMaxWaitMillis(Long.parseLong(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));
// 创建数据库对象
JedisPool jedisPool = new JedisPool(jedisPoolConfig,host, port,
(int) Long.parseLong(timeout.substring(0,timeout.length()-2)),password,database);
return jedisPool;
}
}
Jedis jedis = jedisPool.getResource();
// 操作数据类型 -- java代码
jedis.set("name","qhx");
// -- redis指令
set name qhx
其实,看上述操作jedis和原指令无吊区别。会redis操作指令就会这个。
hash封装map更简单
redis操作指令入门级别:https://blog.csdn.net/Qhx20040819/article/details/131219793
事务处理
操控byte数组
先说一下,一个java对象要正常实现序列化:
对象必须实现Serializable 接口,这是Java提供的标准的序列化接口。
使用 Java 序列化机制提供的 ObjectOutputStream 类将对象写入到输出流中。通过 ObjectOutputStream 的 writeObject() 方法可以将一个对象序列化后,写入到输出流(如文件流、网络流等)中。