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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 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
相关文章
|
6天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
6天前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
11 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
1天前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
6 1
|
1天前
|
安全 Java 测试技术
深入探讨Java安全编程的最佳实践,帮助开发者保障应用的安全性
在网络安全日益重要的今天,确保Java应用的安全性成为了开发者必须面对的课题。本文介绍Java安全编程的最佳实践,包括利用FindBugs等工具进行代码审查、严格验证用户输入以防攻击、运用输出编码避免XSS等漏洞、实施访问控制确保授权访问、采用加密技术保护敏感数据等。此外,还强调了使用最新Java版本、遵循最小权限原则及定期安全测试的重要性。通过这些实践,开发者能有效提升Java应用的安全防护水平。
5 1
|
3天前
|
存储 设计模式 Java
Java中的if-else语句:深入解析与应用实践
Java中的if-else语句:深入解析与应用实践
|
5天前
|
Java 大数据 测试技术
Java对象头压缩---- 永久为Java应用“降本增效”
本文介绍了一下OpenJDK的最新技术,对象头压缩,来大幅优化Java对象的内存占用。
|
5天前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
5 0
|
7天前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
4天前
|
NoSQL 数据可视化 Redis
Mac安装Redis
Mac安装Redis
15 3