redis应用;redis经典五种基本类型、java工具类

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: redis应用

redis应用


优点:

降低后端负载,查询压力

提高读写效率,降低响应时间


缺点:

数据一致性成本,mysql如果改变了数据,redis如何同步修改

代码维护成本—代码复杂度

运维成本–redis花钱比es贵,雪崩问题等等

redis

》nosql

非关系型数据库

基于内存的key-value形式

与sql区别:非结构化、无关联的(每个key只要求不同,实际互不干扰)、非sql、没有acdi事务。

单线程、每个命令具备原子性

低延迟、速度快(百万级别)----亮点

支持数据持久化

支持主从集群、分片集群


通用命令:keys (数据量大慎用)

del

exists

expire(有效期)

ttl(查看剩下有效期)

经典五种基本类型

String

string

int

float

字符串最大空间不超过512m

指令

set

get

mset

mget

incr

incrby

incrbyfloat

setnx

setex

可以用:隔开命名

规范 项目名:业务名:类型:id

hash

value是无序字典

类似java hashmap

CRUD单个字段更容易

命令

hset

hget

hmset

hmget

hgetall

hkeys(数据量大慎用)

hvals

hncrby

hsetnx

List

与java linkedlist类似,双向链表,支持正向反向检索

有序

可重复

插入,删除快

查询一般

应用场景:朋友圈点赞列表、评论列表

命令

lpush

lpop

rpush

rpop

lrange

blpop

brpop

补充:队列 先进先出

栈 先进后出

set

与hashset类似

无序

元素不可重复

查找快

支持交集、并集、差集(相对来说SQL实现比较复杂,所以用redis更简洁)


命令

sadd

srem 移除指定

scard 元素个数

sismember 判断一个元素是否存在set中

smembers 所有

sinter 交集

sdiff 差集

sunion 并集


sortedset

可排序set 与treeset类似

元素不重复

查询速度快

应用:排行榜


命令

zadd

zrem

zscore

zrank

zcard

zcount

zincrby

zrange

zrangebyscore

zdiff

zinter

zunion


java工具类

spring data redis

jedis lettuce


jedis

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();
}
}
}

SpringDataRedis企业用的多

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);
  }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
20小时前
|
Java 编译器 数据库连接
Java中的注解机制及其应用
Java中的注解机制及其应用
|
21小时前
|
Java
Java中的锁机制及其应用
Java中的锁机制及其应用
|
21小时前
|
Java API 开发者
Java中的Socket编程与应用
Java中的Socket编程与应用
|
21小时前
|
并行计算 Java API
Java中的并发工具类详解
Java中的并发工具类详解
|
17小时前
|
存储 算法 Java
Java中的集合框架:深度解析与应用
Java中的集合框架:深度解析与应用
|
21小时前
|
存储 缓存 NoSQL
如何在Java中使用Redis
如何在Java中使用Redis
|
1天前
|
前端开发 Java 定位技术
使用Java实现实时地图应用
使用Java实现实时地图应用
|
1天前
|
SQL 监控 安全
Java Web应用的安全防护与攻防
Java Web应用的安全防护与攻防
|
2月前
|
NoSQL Java Redis
用java写个redis工具类
用java写个redis工具类
87 0
|
NoSQL Java Redis
java Redis工具类
java Redis工具类
946 0