》nosql
非关系型数据库
基于内存的key-value形式
与sql区别:非结构化、无关联的(每个key只要求不同,实际互不干扰)、非sql、没有acdi事务。
单线程、每个命令具备原子性
低延迟、速度快(百万级别)----亮点
支持数据持久化
支持主从集群、分片集群
通用命令:keys (数据量大慎用)
del
exists
expire(有效期)
ttl(查看剩下有效期)
string
int
float
字符串最大空间不超过512m
指令
set
get
mset
mget
incr
incrby
incrbyfloat
setnx
setex
可以用:隔开命名
规范 项目名:业务名:类型:id
value是无序字典
类似java hashmap
CRUD单个字段更容易
命令
hset
hget
hmset
hmget
hgetall
hkeys(数据量大慎用)
hvals
hncrby
hsetnx
与java linkedlist类似,双向链表,支持正向反向检索
有序
可重复
插入,删除快
查询一般
应用场景:朋友圈点赞列表、评论列表
命令
lpush
lpop
rpush
rpop
lrange
blpop
brpop
补充:队列 先进先出
栈 先进后出
与hashset类似
无序
元素不可重复
查找快
支持交集、并集、差集(相对来说SQL实现比较复杂,所以用redis更简洁)
命令
sadd
srem 移除指定
scard 元素个数
sismember 判断一个元素是否存在set中
smembers 所有
sinter 交集
sdiff 差集
sunion 并集
可排序set 与treeset类似
元素不重复
查询速度快
应用:排行榜
命令
zadd
zrem
zscore
zrank
zcard
zcount
zincrby
zrange
zrangebyscore
zdiff
zinter
zunion
spring data redis
jedis lettuce
1、引入依赖
<dependency>
<groupId>redis-clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
2、建立连接
private Jedis jedis;
@BrforeEach
void xx() {
jedis = new Jedis("127.0.0.1",6379);
jedis.auth("root");
jedis.select(0);
}
3、实现
@Test
void xx() {
String result = jedis.set("name","df");
jedis.get("name");
}
4、释放资源
@AfterEach
void xx() {
if(jedis != null) {
jedis.close();
}
}
jedis本身线程不安全—》推荐线程池
public class xxx {
private static final JedisPool jedisPool;
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolconfig.setMaxTotal(8);
jedisPoolConfig.setMaxIdle(8);
jedisPoolConfig.setMinIdle(0);
jedisPoolConfig.serMaxWaitMilis(200);
jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, 1000, "root");
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
}
api
redisTeplate通用
redisTeplate.opsForvalue() String
redisTeplate.opsForHash()
redisTeplate.opsForList()
redisTeplate.opsForSet()
redisTeplate.opsForZSet()
1、引入依赖
<dependency>
<groupId>org.springframework-boot</groupId>
<artifactId>spring-boot-starter-data-redis</artiactId>
</dependency>
<dependency>
<groupId>org.apache.cmmons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2、配置
spring:
redis:
host: 127.0.0.1
port: 6379
password: root
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100
3/应用
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() {
redisTemplate.opsForValue().set("name","fds");
Object name = redisTemplate.opsForValue().get("name");
sout(name);
}
存入的数据\xAC\xED\x00…
可以序列化处理
1、使用StringRedisTemplate
2、Redis写入对象序列化为JSON
3、Reids读取JSON反序列化为对象
@Autowired
private StringRedisTemplate stringRedisTemplate;
private static final ObjectMapper mapper = new ObjectMapper();
@Test
public void test() throws JsonProcessingException {
User user = new User(299L,"dfs");
String json = mapper.writeValueAdString(user);
String val = stringReditsTemplate.opsForValue().set("user:newUser:" + user.getId());
User result = mapper.redValue(val, User.class);
sout(result);
}
}