前言
redis简单来讲是内存数据库,因为是将数据存放到内存,因此读写速率高快(传统数据库,不是先从内存转到硬存,慢)
1.jedis连接Redis
redis是java操作redis的客户端,通过他我们能通过java语句操控redis。
jedis对于redis,相对于jdbc对于mysql。(底层)
1.1 jedis连接redis
本笔记采用,md由于底层几乎没人用,因此导入springboot依赖,外加springboot整合redis依赖即可。
	  springboot1.0x 默认采用的连接池技术是jedis
	  2.0 以上版本连接池是Lettuce
<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<exclusions>
				<exclusion>
					<groupId>io.lettuce</groupId>
					<artifactId>lettuce-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		
		<!--jedis依赖 -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>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的指令。
1.2 jedis连接池连接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();
        }
1.3 将Jedis对象交给spring管控
理解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: 4Redis.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;
    }
}
1.4 jedis操作各种数据类型
     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() 方法可以将一个对象序列化后,写入到输出流(如文件流、网络流等)中。 



















