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

3.23日学习打卡

目录:

  • 3.23日学习打卡
  • Redis
    • Redis可视化工具
    • Java整合Redis Jedis操作
    • Java整合Redis Spring-Data-Redis

Redis

在这里插入图片描述

Redis可视化工具

安装Redis_Desktop_Manager

官网 https://rdm.dev/pricing

直接下载

下载Redis Desktop Manager

在这里插入图片描述
选择安装路径
在这里插入图片描述
连接Redis服务
关闭防火墙

systemctl stop firewalld.service

关闭保护模式

protected-mode no

开启远程访问

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

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

配置连接服务
在这里插入图片描述
配置信息
在这里插入图片描述

Java整合Redis Jedis操作

在这里插入图片描述
什么是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

在这里插入图片描述
简介
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;
     }
   }

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力
在这里插入图片描述

上一篇:【神经网络】得分函数,损失函数~


下一篇:求奖金(if)(C语言)