3.23日学习打卡----初学Redis(三)

这篇具有很好参考价值的文章主要介绍了3.23日学习打卡----初学Redis(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3.23日学习打卡

Redis

3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库

Redis可视化工具

安装Redis_Desktop_Manager

官网 https://rdm.dev/pricing

直接下载

下载Redis Desktop Manager
3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库

3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库
选择安装路径
3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库
连接Redis服务
关闭防火墙

systemctl stop firewalld.service

关闭保护模式

protected-mode no

开启远程访问

redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf。

注释掉bind 127.0.0.1 可以使所有的ip访问redis

配置连接服务
3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库
配置信息
3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库

Java整合Redis Jedis操作

3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库
什么是Jedis
Jedis是Redis官方推荐的Java连接开发工具。

引入Jedis
创建maven工程

引入maven依赖

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>3.6.0</version>
</dependency>
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
</dependency>

Jedis连接到redis

//第一个参数是ip地址,第二个参数是端口
Jedis jedis = new Jedis("192.168.56.31",6379); 

注意:
在连接之前,需要开放redis连接服务,redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no,关闭防火墙。

连接Redis服务

Jedis jedis = new Jedis("192.168.56.31",6379);
//通过ping()方法向redis发送一个ping命令,服务器返回一个Pong
String msg = jedis.ping();
System.out.println(msg);
//jedis使用完毕需要关闭
jedis.close();

Jedis-API:String

//设置一个key
jedis.set("k1","v1"); 
//设置一个key
jedis.set("k2","1");
//获取一个key
String res = jedis.get("k1");
//对某一个key自增
Long ires = jedis.incr("k2");

Jedis-API:Keys

//返回所有的key
Set<String> keys = jedis.keys("*");
//返回该key剩余过期时间
Long time = jedis.ttl("k1");

Jedis-API:List

//向list中添加数据
jedis.lpush("list1","v1","v2","v3");
//返回list全部数据
List<String> list = jedis.lrange("list1",0,-1 );

Jedis-API:Set

//向set中添加数据
jedis.sadd("set1" ,"v1","v2","v2","v3");
//查看该集合中有多少个元素
jedis.smembers("set1");

Jedis-API:Hash

//设置一个hash
jedis.hset("user","age","25");
//获取该key的所有value
jedis.hvals("user");

Jedis-API:Zset

//向zset中添加一条数据
jedis.zadd("zset1",100,"java");
//获取所有的值
jedis.zrange("zset1",0,-1);

Jedis-API:Bitmaps

//将b1偏移量为0的位设置为1
jedis.setbit("b1",0, "1");
//获取b1偏移量为0的位
jedis.getbit("b1",0);

Jedis-API:Geospatia

//添加一条地理信息数据
jedis.geoadd("chinacity",130,110,"beijing");

Jedis-API:Hyperloglog

//将所有元素参数添加到 Hyperloglog 数据结构中。
jedis.pfadd("book","c++","java","php");

注意:
其实jedis中的方法基本同redis命令一致。

Java整合Redis Spring-Data-Redis

3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库
简介
Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持发布订阅。

RedisTemplate介绍
Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。

org.springframework.data.redis.core
Class RedisTemplate<K,V>

注意
K:模板中的Redis key的类型,模板中的Redis key的类型(通常为String)如:RedisTemplate<String, Object>。
V:模板中的Redis value的类型

RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
StringRedisTemplateRedisTemplate

StringRedisTemplate与RedisTemplate

  • 两者的关系是StringRedisTemplate继承RedisTemplate。

  • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

  • SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
    StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
    RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

pom.xml添加依赖

 <dependencies>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>io.projectreactor</groupId>
       <artifactId>reactor-test</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

在application.properties中配置

#Redis服务器连接地址
spring.redis.host=192.168.56.31
#Redis服务器连接端口
spring.redis.port=6379
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000

自定义序列化

/**
 * 自定义序列化方式
 */
@Configuration
public class RedisConfig {
   @Bean
   public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
     RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
     redisTemplate.setKeySerializer(new StringRedisSerializer());
     redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
     redisTemplate.setHashKeySerializer(new StringRedisSerializer());
     redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
     redisTemplate.setConnectionFactory(redisConnectionFactory);
     return redisTemplate;
   }
}

使用redisTemplate进行各类型的CURD操作
String数据类型操作
添加元素

public boolean set(String key,Object value){
   try{
   redisTemplate.opsForValue().set(key,value);
       return true;
     }catch (Exception e){
       log.error("redis set value exception:{}",e);
       return false;
     }
   }

获取元素

 public Object get(String key){
     return  key == null ? null : redisTemplate.opsForValue().get(key);
   }

添加元素并设置过期时间

public boolean setex(String key,Object value,long expire){
    try{
      //TimeUnit.SECONDS指定类型为秒
      redisTemplate.opsForValue().set(key,value,expire,       TimeUnit.SECONDS);
      return true;
     }catch (Exception e){
      log.error("redis set value and expire exception:{}",e);
      return false;
     }
   }

Hash类型的操作

添加元素

public boolean hset(String key, String field, Object value,long seconds) {
    try {
      redisTemplate.opsForHash().put(key, field, value);
      expire(key,seconds);//调用通用方法设置过期时间
      return true;
     }catch (Exception e){
      log.error("redis hset and expire eror,key:{},field:{},value:{},exception:{}",key,field,value,e);
      return false;
     }
   }

获取数据

public Object hget(String key,String field){
    return redisTemplate.opsForHash().get(key,field);
   }

set类型的操作
添加元素

  public long sset(String key ,Object...values){
    try {
      return redisTemplate.opsForSet().add(key,values);
     }catch (Exception e){
      log.error("redis sset error,key:{},value:{},values:{},exception:{}",key,values,e);
      return 0;
     }
   }

获取set的长度

public long sgetSize(String key){
    try {
      return redisTemplate.opsForSet().size(key);
     }catch (Exception e){
      log.error("redis sgetSize error,key:{},exception:{}",key,e);
      return 0;
     }
   }

获取元素

 public Set<Object> sgetAll(String key){
    try {
      return redisTemplate.opsForSet().members(key);
     }catch (Exception e){
      log.error("redis sgetAll error,key:{},exception:{}",key,e);
      return null;
     }
   }

zset类型的操作
添加元素

  public  boolean zadd(String key,Object member,double score){
     try {
       return  redisTemplate.opsForZSet().add(key,member,score);
     } catch (Exception e) {
       log.error("redis zadd error,key:{},value:{},score:{},exception:{}",key,member,score,e);
       return false;
     }
   }

获取元素

  public Set<String> zrange(String key,int start,int end){
    try {
      Set<Object> range = redisTemplate.opsForZSet().
          range(key, start, end);
      if(range==null||range.size()==0) return null;
      return  range.stream().
          map(o->(String)o).collect(Collectors.toSet());
     } catch (Exception e) {
      log.error("redis zrange error,key:{},start:{},end:{},exception:{}",
          key,start,end,e);
      return null;
     }
   }

list类型的操作
添加元素

 public boolean lrpush(String key, Object value) {
    try {
 redisTemplate.opsForList().rightPush(key, value);
      return true;
     } catch (Exception e) {
      log.error("redis lrpush error,key:{},value:{}exception:{}",key,value,e);
      return false;
     }
   }

获取元素

  public List<Object> getList(String key,int start,int end) {
    try {
      List<Object> o = redisTemplate.opsForList().range(key,start,end);
      return o;
     } catch (Exception e) {
      return null;
     }
   }

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力
3.23日学习打卡----初学Redis(三),每日学习,学习,redis,数据库文章来源地址https://www.toymoban.com/news/detail-843134.html

到了这里,关于3.23日学习打卡----初学Redis(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.13日学习打卡----初学RocketMQ(四)

    概述 DefaultMQProducer 类是应用发送消息使用的基类,封装一些通用的方法方便开发者在更多场景中使用。属于线程安全类,在配置并启动后可在多个线程间共享此对象。 其可以通过无参构造方法快速创建一个生产者,通过 getter/setter 方法,调整发送者的参数。主要负责消息的

    2024年02月21日
    浏览(36)
  • 2.14日学习打卡----初学Zookeeper(一)

    单机架构 一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器提供。 缺点 : 服务性能存在瓶颈 不可伸缩性 代码量庞大,系统臃肿,牵一发动全身 单点故障问题 集群架构 单机处理到达瓶

    2024年02月22日
    浏览(50)
  • 2.16日学习打卡----初学Dubbo(一)

    可以看我的这篇文章–2.14日学习打卡----初学Zookeeper(一) RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务。 大白话理解就是:RPC让你用别人家的东西就像自己家的一样。 RPC两个作用: 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项

    2024年02月19日
    浏览(42)
  • Redis学习指南(2)-Redis与传统SQL数据库的差异

    在数据库领域,Redis和SQL数据库是两种不同的存储解决方案,各自具有一系列优势和劣势。本文将对Redis和SQL数据库进行对比分析,以帮助读者更好地了解它们的特点和适用场景。 1. 高性能 Redis以其出色的性能而闻名,主要因为它是一个基于内存的键值存储系统。这意味着数

    2024年01月21日
    浏览(53)
  • 轻松打卡:使用Spring Boot和Redis Bitmap构建高效签到系统【redis实战 四】

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis List:打造高效消息队列的秘密武器【redis实战 一】 Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】 Spring Boot和Redis Geo实现附近的人【redis实战 三】 在数字化时代,签到系统已成为许多

    2024年01月23日
    浏览(42)
  • ERROR: No matching distribution found for gradio>=3.23

    今天运行chatGPTweb项目的时候 跟下载其他包时候一样使用清华源下载的时候,pip install gradio==3.23 -i https://pypi.python.org/pypi 然后, 报错了 。 国内的镜像源还没有更新到 gradio=3.23,所以需要科学上网,手动去pypi官网下载whl,然后通过whl下载即可。 1.从官网中下载gradio编译的pyd文

    2024年02月11日
    浏览(60)
  • 已解决ERROR: No matching distribution found for gradio==3.23

    已解决stderr: ERROR: Could not find a version that satisfies the requirement gradio==3.23 ERROR: No matching distribution found for gradio==3.23 粉丝群里面的一个小伙伴遇到问题跑来私信我,想用pip安装gradio ,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记

    2023年04月18日
    浏览(45)
  • 每日八股-Redis篇-06

    主要内容: 数据过期策略 数据淘汰策略 1.假如Redis的key过期之后,会立即删除吗? Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。 惰性删除: 设置

    2024年02月09日
    浏览(29)
  • 每日八股-Redis篇-05

    1.Redis作为缓存,MySQL的数据如何和Redis进行同步呢?(双写一致性) 设置前提:先介绍自己的业务背景 背景1:我们当时是把文章的热点数据存入到了缓存中,虽然是热点数据,但是 实时要求性并没有那么高 ,所以我们当时采用的是异步的方案同步的数据。 我们当时采用的

    2024年02月08日
    浏览(28)
  • 每日八股-Redis篇-完结

    场景:Redis分布式锁,是如何实现的? 需要结合项目中的业务进行回答,通常情况下,分布式锁使用的场景: 集群情况下的定时任务、抢单、幂等性场景。 抢券场景 : 抢券执行流程 : Redis分布式锁 : Redis实现分布式锁主要利用Redis的setnx命令,setnx是SET if not exists(如果不

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包