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);
  }
}
相关文章
|
24天前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
159 3
|
27天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
88 8
|
2月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
328 12
|
2月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
216 1
Redis-常用语法以及java互联实践案例
|
2月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
248 1
|
2月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
221 86
|
2月前
|
存储 缓存 监控
Redis分区的核心原理与应用实践
Redis分区通过将数据分散存储于多个节点,提升系统处理高并发与大规模数据的能力。本文详解分区原理、策略及应用实践,涵盖哈希、范围、一致性哈希等分片方式,分析其适用场景与性能优势,并探讨电商秒杀、物联网等典型用例,为构建高性能、可扩展的Redis集群提供参考。
108 0
|
3月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
NoSQL Java Redis
用java写个redis工具类
用java写个redis工具类
280 0
|
NoSQL Java Redis
java Redis工具类
java Redis工具类
1148 2