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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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
相关文章
|
6天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
10天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
20 7
|
7天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
20 3
|
7天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
20 2
|
9天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
9 1
|
10天前
|
Java 开发者
Java中的多线程基础与应用
【10月更文挑战第24天】在Java的世界中,多线程是提高效率和实现并发处理的关键。本文将深入浅出地介绍如何在Java中创建和管理多线程,以及如何通过同步机制确保数据的安全性。我们将一起探索线程生命周期的奥秘,并通过实例学习如何优化多线程的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编程的大门。
11 0
|
11天前
|
存储 NoSQL Java
Java 使用 Redis
10月更文挑战第22天
19 0
|
6月前
|
NoSQL Java Redis
用java写个redis工具类
用java写个redis工具类
130 0
|
NoSQL Java Redis
java Redis工具类
java Redis工具类
994 0
|
8天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?