SortedSet类型

特性

1.可排序

2.元素不重复性

3.查询速度快

与普通的集合类型相比,SortedSet 主要有以下两个特点:

  1. 有序性:根据分数对元素进行排序,便于范围查找等操作。
  2. 不重复性:即使添加了相同的元素,也只会保留一个。

SortedSet 提供了许多常用的操作方法,包括添加元素、删除元素、查找元素、范围查找(支持按分数范围、按排名范围)等。具体的方法和使用方式可以参考 Redis 文档或教程。

在实际应用中,SortedSet 可以用于排行榜、计数器、带权重的任务队列等场景。以排行榜为例,可以将玩家与对应的分数作为 SortedSet 的元素,进行插入、删除、更新操作,同时可以方便地进行排名查找、前几名的统计等操作。

redis的java客服端

jedis: 以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用

lettuce:Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。

redisson:Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map.Queue. Lock.Semaphore. AtomicLong等强大功能

java-redis-client

vertx-redis-client

jedis

        <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.0.0-alpha2</version>
</dependency>

jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此使用Jedis连接池代替Jedis

SpringDateRedis

Spring   Redis的优点:

  1. 简化的 API:Spring Data Redis提供了简单易用的API,使得与Redis进行交互变得更加方便和高效。

  2. 集成Spring生态系统:Spring Data Redis与其他Spring生态系统无缝集成,如Spring Boot、Spring MVC等,可以方便地与其他组件和框架进行协作开发。

  3. 缓存支持:Spring Data Redis提供了缓存注解,可以方便地将方法结果缓存到Redis中,提高系统性能和响应速度。

  4. 声明式事务管理:Spring Data Redis支持声明式事务管理,可以通过注解的方式来管理Redis操作的事务,保证数据的一致性和隔离性。

  5. 多种序列化支持:Spring Data Redis支持多种数据序列化方式,如JSON、XML、Protobuf等,使得存储和读取数据更加灵活可扩展。

  6. 强大的功能支持:Spring Data Redis提供了丰富的功能支持,如分布式锁、发布订阅、Lua脚本执行等,可以满足复杂应用场景下的需求。

主要缺点:

  1. 性能考虑:虽然Redis本身是一个高性能的内存数据库,但使用Spring Data Redis进行数据访问时,需要考虑性能问题,避免不必要的网络开销和序列化开销。

<!--        redis 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>

yml中的配置

spring:
#redis的所有配置方式
redis:
host: localhost
port: 6379
# password: 123456 # 如果有密码,请填写密码
timeout: 2000ms
lettuce:
pool:
max-active: 8 #最大连接
max-idle: 8 #最大空闲连接
min-idle: 0 #最小空闲连接
max-wait: -1ms #连接等待时间

RedisTemplate的两种序列化实践方案

方案一:

1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:

1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
读取Redis时,手动把读取到的JSON反序列化为对象

RedisTemplate的序列化方式

config
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
// 创建Template对象
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
// key和 hashKey采用 string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
}
测试代码:
  @Autowired
  RedisTemplate<String,Object> redisTemplate;
    @Test
void BookTypeName(){
List<BookTypeNameEntity> list = bookTypeNameService.list();
BookTypeNameEntity bookTypeNameEntity = list.get(0);
System.out.println(bookTypeNameEntity);
redisTemplate.opsForValue().set("bookType1",bookTypeNameEntity);
Object name = redisTemplate.opsForValue().get("bookType1");
System.out.println(name);
}

StringRedisTemplate的序列化方式

  @Autowired
StringRedisTemplate stringRedisTemplate; private static final ObjectMapper mapper = new ObjectMapper(); @Test
void StringBookTypeName() throws JsonProcessingException {
List<BookTypeNameEntity> list = bookTypeNameService.list();
//获取对象
BookTypeNameEntity bookTypeNameEntity = list.get(0);
System.out.println(bookTypeNameEntity);
//手动序列化
String s = mapper.writeValueAsString(bookTypeNameEntity);
// 写入数据
stringRedisTemplate.opsForValue().set("bookType3", s);
String name = stringRedisTemplate.opsForValue().get("bookType3");
// 手动反序列化
BookTypeNameEntity book = mapper.readValue(name,BookTypeNameEntity.class);
System.out.println(name);
}
Hash 的 StringRedisTemplate 方式
  @Test
void toHashBookTypeName() {
stringRedisTemplate.opsForHash() .put( "user:400", "name","虎哥");
stringRedisTemplate.opsForHash().put( "user:400", "age" , "121") ;
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries( "user:400");
System.out.println("entries-----------"+entries);
}

1、reids 基础的更多相关文章

  1. 二、Reids基础命令--字符串

    11.一个字符串类型的KEY同意存储的数据的最大容量是 512MB 12.INCR 使key加1,key不存在时默认是0 . 返回递增后的值. 127.0.0.1:6379> incr num ...

  2. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  3. 在centos6.5中安装reids

    一.简介 Redis是一个key-value存储系统,是一个内存数据库,Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作 ...

  4. reids配置参数详解

    转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no  默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...

  5. Java使用reids,以及redis与shiro集成

    什么是redis:redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  6. Redis基础知识点面试手册

    Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...

  7. D11——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D11 20180908内容纲要: 1.RabbitMQ消息队列 (1)RabbitMQ安装 (2)Rabbits示例 模式一:fanout 模式二:direct ...

  8. Redis学习基础三

    回顾: 上一基础上浅尝了redis的存储数据类型,这一节将分别介绍数据类型的基础使用 一.启动本地Redis服务 1.打开cmd 窗口 使用 cd 命令切换至redis 安装根目录 运行: redis ...

  9. Redis学习基础一

    今天开始系统的学习redis基础知识,以往只是看redis的手册,貌似总是记不住.这次尝试手记笔记,使得印象更加深刻,从零开始学习.看是很慢,其实很快哟. 一.什么是Redis 至于什么是redis, ...

  10. Python菜鸟之路:Python基础-操作缓存memcache、redis

    一.搭建memcached和redis 略,自己去百度吧 二.操作Mmecached 1. 安装API python -m pip install python-memcached 2. 启动memc ...

随机推荐

  1. CSS之transition属性

    1.鼠标移动到div中背景颜色慢慢变化(1个属性的变化) <!DOCTYPE html> <html> <head> <title></title ...

  2. Go 常用标准库之 fmt 介绍与基本使用

    Go 常用标准库之 fmt 介绍与基本使用 目录 Go 常用标准库之 fmt 介绍与基本使用 一.介绍 二.向外输出 2.1 Print 系列 2.2 Fprint 系列 2.3 Sprint 系列 ...

  3. 简单实现.NET Hook与事件模拟

    最近玩<星露谷物语>上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了. 虽然挺有意思,但是太肝了,入坑前请谨慎.补充一下,这个游戏应该是基于 X ...

  4. docker 安装、升级、修改数据目录

    1.查看系统要求 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本. uname -a 2.删除旧版本 yum remove docker docker-c ...

  5. yum仓库及NFS共享

    yum仓库及NFS共享 1.yum简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系.解决了日 ...

  6. Wonder8.promotion营销规则引擎,轻松搞掂千变万化的营销玩法

    超过10年没有更新过内容了,不知道现在园子的氛围这类文章还适不适合放首页 想着整点内容,也是支持园子! 旺德發.营销 引擎 概述 为了广泛支持营销活动的复杂与灵活,Wonder8.promotion( ...

  7. JUC并发编程学习(五)集合类不安全

    集合类不安全 List不安全 单线程情况下集合类和很多其他的类都是安全的,因为同一时间只有一个线程在对他们进行修改,但是如果是多线程情况下,那么集合类就不一定是安全的,可能会出现一条线程正在修改的同时 ...

  8. HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机

    双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配.如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配.比如 ushers ...

  9. Windows 搭建 Flutter 开发环境

    安装 去官网地址下载 Flutter SDK. 下载地址:https://flutter.dev/docs/development/tools/sdk/releases 将安装包解压到你想安装 Flu ...

  10. 🔥🔥Java开发者的Python快速进修指南:网络编程及并发编程

    今天我们将对网络编程和多线程技术进行讲解,这两者的原理大家都已经了解了,因此我们主要关注的是它们的写法区别.虽然这些区别并不是非常明显,但我们之所以将网络编程和多线程一起讲解,是因为在学习Java的s ...