一:认识NOSQL
1.非结构化--数据结构不固定
2.无关联
3.查询方式非SQL
4.BASE-无事务
⭐与SQL进行对比
二:认识Redis
三:Redis安装
略
四:Redis常用数据结构
1.通用命令
keys不建议在生产环境中使用
2.String类型
问题:如何区分不同类型的key?例:商品id,用户id都是1
3.Hash类型
常见命令:
PS:
MSET:对一个key中的值设置多个键值对
MGET: 从一个key对应值中取多个键值对
4.List类型
5.Set类型
6.SortedSet类型
五:Redis的Java客户端
ps:Redis快速入门看PPT
Jedis连接池
Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,推荐使用Jedis连接池代替Jedis的直连方式。
public class JedisConnectionFactory {
private static final JedisPool jedisPool ;
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//最大连接
jedisPoolConfig.setMaxTotal(8);
//最大空闲连接
jedisPoolConfig.setMaxIdle(8);
//最小空闲连接
jedisPoolConfig.setMinIdle(o);
//设置最长等待时间, ms
jedisPoolConfig.setMaxwaitMillis(200);
jedisPool = new JedisPool(jedisPoolConfig,"192.168.150.101",6379,
1000,"123321");
}
//获取jedis对象
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
RedisTemplate工具类
SpringBoot整合Redis:
1.引入依赖
<!--Redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency>
<groupId>org.apache. commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.配置文件
spring:
redis:
host: 192.168.150.101
port: 6379
password: 123321
lettuce:
pool:
max-active: 8 #最大连接
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
max-wait: 100 #连接等待时间
3.注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
4.编写测试
@SpringBootTest
public class RedisTest i
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString() {
//插入一条string类型数据
redisTemplate.opsForValue().set ( "name","李四");//读取一条string类型数据
Object name = redisTemplate.opsForValue( ).get ( "name") ;System.out.println( "name = " + name) ;
}
}
SpringDataRedis序列化方式
方案一:
自定义RadisTemplate的序列化方式
为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入jison结果中,存入Redis,会带来额外的内存开销。
方案二:
Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:
@Autowired
private StringRedisTemplate stringRedisTemplate;// JSON工具
private static final ObjectMapper mapper = new 0bjectMapper();
@Test
void testStringTemplate() throws JsonProcessin'gException {
//准备对象
User user = new User("虎哥",18);//手动序列化
String json = mapper.writeValueAsString(user);//写入—条数据到redis
stringRedisTemplate.opsForValue( ).set( "user:200",json);
//读取数据
String val = stringRedisTemplate.opsForValue().get( "user:200");//反序列化
User user1 = mapper.readValue (val, User.class);system.out.println( "user1 = " + user1);
}