深入学习redis-基于Jedis通过客户端操作Redis

目录

redis客户端(JAVA)

配置

引入依赖

建立连接

常用命令实现

get/set

exists/del

keys

expire和ttl

type

字符串(String)

mget和mset

getrange和setrange

append

incr和decr

列表(list)

lpush和lrange

rpush

lpop

rpop

blpop

llen

集合(set)

sadd和smembers

sismember

scard

spop

sinter

sinterstore

哈希(hash)

hset和hget

hexists

hdel

hkeys和hvals

hmget和hmset

有序集合(zset)

zadd和zrange

zcard

zrem

zscore

zrank

SpringDataRedis

RedisTemplate工具类

SpringDataRedis快速入门

引入依赖

配置文件

注入RedisTemplate

编写测试

SpringDataRedis的序列化方式

方案一

方案二

构建一个类来测试redis的方法

string

list

​编辑

set

hash

zset


Jedis的官网地址

redis客户端(JAVA)

java生态中,封装了RESP协议,在这里使用jedis实现redis客户端

配置

引入依赖

创建一个maven项目,引入jedis依赖

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>4.4.2</version>
        </dependency>
    </dependencies>

进行简单配置,把云服务器的端口当成一个本地的端口使用

连接上云服务器上的 redis ,就需要开放 6379 端口:

  1. 将 java 程序打包成 jar 包,放到 linux 服务器上执行(过于麻烦,不推荐);
  2. 匹配 ssh 端口转发,把云服务器的 redis 端口,映射到本地主机(推荐).

点击会话,右键点击属性

查看ssh连接是否生效

建立连接

写出一个类来验证

public class RedisDemo {
    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            //redis的各种命令,就都对应到jedis对象的各种方法
            String pong=jedis.ping();
            System.out.println(pong);
        }
    }
}

常用命令实现

get/set

public class RedisDemo {
    public static void test1(Jedis jedis){
        System.out.println("get和set的使用");
        //先清空数据库
        jedis.flushAll();

        //set
        jedis.set("key","111");
        jedis.set("key2","222");

        //get
        String value=jedis.get("key");
        System.out.println("value="+value);
    }

    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

设置超时时间

public class RedisDemo {
    public static void test1(Jedis jedis){
        System.out.println("get和set的使用");
        //先清空数据库
        jedis.flushAll();

        //set
        jedis.set("key","111");
        jedis.set("key2","222");
        SetParams params=new SetParams();
        params.ex(10);
        params.xx();
        jedis.set("key","333",params);

        //get
        String value=jedis.get("key");
        System.out.println("value="+value);
    }


    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){

            test1(jedis);
        }
    }
}

exists/del

public class RedisDemo {

    public static void test2(Jedis jedis){
        System.out.println("exists和del");
        jedis.flushAll();

        jedis.set("key","111");
        jedis.set("key2","222");

        boolean result=jedis.exists("key");
        System.out.println("result:"+result);
        
        long result2=jedis.del("key");
        System.out.println("result2:"+result2);

        result=jedis.exists("key");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

keys

public class RedisDemo {

    public static void test3(Jedis jedis){
        System.out.println("keys");
        jedis.flushAll();

        jedis.set("key","111");
        jedis.set("key2","222");
        jedis.set("key3","333");
        jedis.set("key4","444");

        Set<String> keys=jedis.keys("*");
        System.out.println(keys);
    }

    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

expire和ttl

public class RedisDemo {

    public static void test4(Jedis jedis){
        System.out.println("expire和ttl");
        jedis.flushAll();

        jedis.set("key","111");
        jedis.expire("key",10);

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Long time=jedis.ttl("key");
        System.out.println("time:"+time);
    }

    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

type

public class RedisDemo {

    public static void test5(Jedis jedis){
        System.out.println("type");
        jedis.flushAll();

        jedis.set("key","111");
        String type=jedis.type("key");
        System.out.println("type:"+type);

        jedis.lpush("key2","111","222","333");
        type=jedis.type("key2");
        System.out.println("type:"+type);

        jedis.hset("key3","f1","111");
        type=jedis.type("key3");
        System.out.println("type:"+type);

        jedis.sadd("key4","111","222","333");
        type=jedis.type("key4");
        System.out.println("type:"+type);

        jedis.zadd("key5",10,"zhangsan");
        type=jedis.type("key5");
        System.out.println("type:"+type);
    }

    public static void main(String[] args) {
        //连接到Redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

字符串(String)

mget和mset

public class RedisDemoString {

    public static void test1(Jedis jedis){
        System.out.println("mget和mset");
        jedis.flushAll();

        jedis.mset("key1","111","key2","222","key3","333");

        List<String> values=jedis.mget("key1","key2","key3");
        System.out.println("values:"+values);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

getrange和setrange

public class RedisDemoString {
    public static void test2(Jedis jedis){
        System.out.println("getrange和setrange");
        jedis.flushAll();

        jedis.set("key","abjskjdcd");
        String result=jedis.getrange("key",2,5);
        System.out.println("result:"+result);

        jedis.setrange("key",2,"xyz");
        String value=jedis.get("key");
        System.out.println("value:"+value);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

append

public class RedisDemoString {
    public static void test3(Jedis jedis){
        System.out.println("append");
        jedis.flushAll();

        jedis.set("key","abcdef");
        jedis.append("key","ghij");

        String value=jedis.get("key");
        System.out.println("value:"+value);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

incr和decr

public class RedisDemoString {
    public static void test4(Jedis jedis){
        System.out.println("incr和decr");
        jedis.flushAll();

        jedis.set("key","100");

        long result=jedis.incr("key");
        System.out.println("result:"+result);

        String value=jedis.get("key");
        System.out.println("value:"+value);

        result=jedis.decr("key");
        System.out.println("result:"+result);

        value=jedis.get("key");
        System.out.println("value:"+value);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

列表(list)

lpush和lrange

public class RedisDemoList {

    public static void test1(Jedis jedis){
        System.out.println("lpush和lrange");
        jedis.flushAll();

        jedis.lpush("key","111","222","333");

        List<String> result=jedis.lrange("key",0,-1);
        System.out.println(result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

rpush

public class RedisDemoList {

    public static void test2(Jedis jedis){
        System.out.println("rpush");
        jedis.flushAll();

        jedis.rpush("key","111","222","333");

        List<String> result=jedis.lrange("key",0,-1);
        System.out.println(result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

lpop

public class RedisDemoList {

    public static void test3(Jedis jedis){
        System.out.println("lpop");
        jedis.flushAll();

        jedis.rpush("key","111","222","333");
        String result=jedis.lpop("key");
        System.out.println("result:"+result);

        result=jedis.lpop("key");
        System.out.println("result:"+result);

        result=jedis.lpop("key");
        System.out.println("result:"+result);

        result=jedis.lpop("key");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

rpop

public class RedisDemoList {

    public static void test4(Jedis jedis){
        System.out.println("lpop");
        jedis.flushAll();

        jedis.rpush("key","111","222","333");
        String result=jedis.rpop("key");
        System.out.println("result:"+result);

        result=jedis.rpop("key");
        System.out.println("result:"+result);

        result=jedis.rpop("key");
        System.out.println("result:"+result);

        result=jedis.rpop("key");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

blpop

public class RedisDemoList {

    public static void test5(Jedis jedis){
        System.out.println("blpop");
        jedis.flushAll();

        //返回结果是一个“二元组”,一个是从哪个key对应的list中删除的,一个是删除的元素是什么
        List<String> results=jedis.blpop(100,"key");
        System.out.println("result[0]:"+results.get(0));
        System.out.println("result[1]:"+results.get(1));
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

llen

public class RedisDemoList {

    public static void test6(Jedis jedis){
        System.out.println("llen");
        jedis.flushAll();

        jedis.rpush("key","111","222","333");
        long len= jedis.llen("key");
        System.out.println("len:"+len);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

集合(set)

sadd和smembers

public class RedisDemoSet {

    public static void test1(Jedis jedis){
        System.out.println("sadd和smembers");
        jedis.flushAll();

        jedis.sadd("key","111","222","333");
        Set<String> result=jedis.smembers("key");
        System.out.println("result:"+result);
    }


    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

sismember

public class RedisDemoSet {

    public static void test2(Jedis jedis){
        System.out.println("sismember");
        jedis.flushAll();

        jedis.sadd("key","111","222","333");
        boolean result=jedis.sismember("key","111");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

scard

public class RedisDemoSet {

    public static void test3(Jedis jedis){
        System.out.println("scard");
        jedis.flushAll();

        jedis.sadd("key","111","222","333");
        long result=jedis.scard("key");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

spop

public class RedisDemoSet {

    public static void test4(Jedis jedis){
        System.out.println("spop");
        jedis.flushAll();

        jedis.sadd("key","111","222","333","444","555");
        String result=jedis.spop("key");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

sinter

public class RedisDemoSet {

    //求交集
    public static void test5(Jedis jedis){
        System.out.println("sinter");
        jedis.flushAll();

        jedis.sadd("key","111","222","333");
        jedis.sadd("key2","111","222","444");

        Set<String> result=jedis.sinter("key","key2");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

sinterstore

public class RedisDemoSet {

    public static void test6(Jedis jedis){
        System.out.println("sinterstore");
        jedis.flushAll();

        jedis.sadd("key","111","222","333");
        jedis.sadd("key2","111","222","444");

        long len=jedis.sinterstore("key3","key","key2");
        System.out.println("len:"+len);

        Set<String> result=jedis.smembers("key3");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test6(jedis);
        }
    }
}

哈希(hash)

hset和hget

public class RedisDemoHash {

    public static void test1(Jedis jedis){
        System.out.println("hset和hget");
        jedis.flushAll();

        jedis.hset("key","f1","111");
        Map<String,String> fields=new HashMap<>();
        fields.put("f2","222");
        fields.put("f3","333");
        jedis.hset("key",fields);

        String result=jedis.hget("key","f1");
        System.out.println("result:"+result);

        result=jedis.hget("key","f2");
        System.out.println("result:"+result);

        result=jedis.hget("key","f10");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

hexists

public class RedisDemoHash {

    public static void test2(Jedis jedis){
        System.out.println("hexists");
        jedis.flushAll();

        jedis.hset("key","f1","111");
        jedis.hset("key","f2","222");
        jedis.hset("key","f3","333");

        boolean result=jedis.hexists("key","f1");
        System.out.println("result:"+result);

        result=jedis.hexists("key","f100");
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

hdel

public class RedisDemoHash {

    public static void test3(Jedis jedis){
        System.out.println("hdel");
        jedis.flushAll();

        jedis.hset("key","f1","111");
        jedis.hset("key","f2","111");
        jedis.hset("key","f3","111");

        long result=jedis.hdel("key","f1","f2");
        System.out.println("result:"+result);

        boolean exists= jedis.hexists("key","f1");
        System.out.println("exists:"+exists);
        exists= jedis.hexists("key","f2");
        System.out.println("exists:"+exists);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

hkeys和hvals

public class RedisDemoHash {

    public static void test3(Jedis jedis){
        System.out.println("hkeys和hvals");
        jedis.flushAll();

        jedis.hset("key","f1","111");
        jedis.hset("key","f2","111");
        jedis.hset("key","f3","111");

        Set<String> fields=jedis.hkeys("key");
        List<String> vals=jedis.hvals("key");
        System.out.println("fields:"+fields);
        System.out.println("vals:"+vals);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

hmget和hmset

public class RedisDemoHash {

    public static void test5(Jedis jedis){
        System.out.println("hmget和hmset");
        jedis.flushAll();

        Map<String,String> map=new HashMap<>();
        map.put("f1","111");
        map.put("f2","222");
        map.put("f3","333");
        jedis.hmset("key",map);

        List<String> values=jedis.hmget("key","f1","f2","f3");
        System.out.println("values:"+values);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

有序集合(zset)

zadd和zrange

public class RedisDemoZSet {

    public static void test1(Jedis jedis){
        System.out.println("zadd和zrange");
        jedis.flushAll();

        jedis.zadd("key",10,"zhangsan");
        Map<String,Double> map=new HashMap<>();
        map.put("lisi",20.0);
        map.put("wangwu",30.0);
        jedis.zadd("key",map);

        List<String> members=jedis.zrange("key",0,-1);
        System.out.println("members:"+members);

        List<Tuple> memberWithScore=jedis.zrangeWithScores("key",0,-1);
        System.out.println("memberWithScore:"+memberWithScore);
        String member=memberWithScore.get(0).getElement();
        double score=memberWithScore.get(0).getScore();
        System.out.println("member:"+member+",score:"+score);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test1(jedis);
        }
    }
}

zcard

public class RedisDemoZSet {

    public static void test2(Jedis jedis){
        System.out.println("zcard");
        jedis.flushAll();

        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");
        
        long len=jedis.zcard("key");
        System.out.println("len:"+len);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test2(jedis);
        }
    }
}

zrem

public class RedisDemoZSet {

    public static void test3(Jedis jedis){
        System.out.println("zrem");
        jedis.flushAll();

        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");

        long n=jedis.zrem("key","zhangsan");
        System.out.println("n:"+n);

        List<Tuple> result=jedis.zrangeWithScores("key",0,-1);
        System.out.println("result:"+result);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test3(jedis);
        }
    }
}

zscore

public class RedisDemoZSet {

    public static void test4(Jedis jedis){
        System.out.println("score");
        jedis.flushAll();

        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");

        Double score=jedis.zscore("key","zhangsan");
        System.out.println("score:"+score);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test4(jedis);
        }
    }
}

zrank

public class RedisDemoZSet {

    public static void test5(Jedis jedis){
        System.out.println("zrank");
        jedis.flushAll();

        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");

        Long rank=jedis.zrank("key","zhangsan");
        System.out.println("rank:"+rank);
    }

    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
            test5(jedis);
        }
    }
}

SpringDataRedis

SpringDataRedis是Spring中数据操作的模块,包含对各种数据库的集成,其中Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis

  • 提供了对不同Redis客户端的整合(Lettuce和jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模式
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

RedisTemplate工具类

其中封装了各中对Redis的操作,并且将不同数据类型的操作API封装到了不同的类型中

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作String类型数据
redisTemplate.opsForHash()HashOperations操作Hash类型数据
redisTemplate.opsForList()ListOperations操作List类型数据
redisTemplate.opsForSet()SetOperations操作Set类型数据
redisTemplate.opsForZSet()ZSetOperations操作ZSet类型数据
redisTemplate通用的命令

SpringDataRedis快速入门

引入依赖

		<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>

配置文件

spring:
  redis:
    host: 127.0.0.1
    port: 8888
    password:
    lettuce:
      pool:
        max-active: 8  #最大连接
        max-idle: 8  #最大空闲连接
        min-idle: 0  #最小空闲连接
        max-wait: 100  #连接等待时间

注入RedisTemplate

	@Autowired
	private RedisTemplate redisTemplate;

编写测试

	@Test
	void contextLoads() {
		//写入一条spring数据
		redisTemplate.opsForValue().set("name","baekhyun");
		//获取spring数据
		Object name=redisTemplate.opsForValue().get("name");
		System.out.println("name="+name);

SpringDataRedis的序列化方式

RedisTemplate可以接受任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果如下所示:

这样可读性差而且内存占用较大

因此我们需要自定义RedisTemplate的序列化方式

方案一

1、自定义RedisTemplate;

2、修改RedisTemplate的序列化器GenericJackson2JsonRedisSerializer

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        //创建RedisTemplate对象
        RedisTemplate<String,Object> template=new RedisTemplate<>();
        //设置连接工厂
        template.setConnectionFactory(connectionFactory);
        //创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer=new GenericJackson2JsonRedisSerializer();
        //设置key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        //设置value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        //返回
        return template;
    }

但是我们会发现存储后的数据 对象的类型占用内存大

为了节省空间,并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储java对象时,手动完成对象的序列化和反序列化

方案二

1、使用StringRedisTemplate

2、写入Redis时,手动把对象序列化为json

3、读取Redis时,手动把读取到的JSON反序列化为对象

    @Autowired
	private StringRedisTemplate stringRedisTemplate;	

    private static final ObjectMapper mapper=new ObjectMapper();

	@Test
	void testSaveUser() throws JsonProcessingException {
		//创建对象
		User user=new User("do",30);
		//手动序列化
		String json=mapper.writeValueAsString(user);
		//写入数据
		stringRedisTemplate.opsForValue().set("user:200",json);
		//获取数据
		String jsonUser=stringRedisTemplate.opsForValue().get("user:200");
		//手动反序列化
		User user1=mapper.readValue(jsonUser,User.class);
		System.out.println("user1"+user1);
	}

构建一个类来测试redis的方法

string
//后续redis测试的各种方法,都通过这个Controller提供的http接口来触发
@RestController
public class MyController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping("/testString")
    @ResponseBody
    public String testString(){
        redisTemplate.opsForValue().set("key","111");
        redisTemplate.opsForValue().set("key","222");
        redisTemplate.opsForValue().set("key","333");

        String value=redisTemplate.opsForValue().get("key");
        System.out.println("value:"+value);

        return "ok";
    }
}

界面效果

                                                

list
    @GetMapping("/testList")
    @ResponseBody
    public String testList(){
        //先清除之前的数据
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForList().leftPush("key","111");
        redisTemplate.opsForList().leftPush("key","222");
        redisTemplate.opsForList().leftPush("key","333");

        String value=redisTemplate.opsForList().rightPop("key");
        System.out.println("value:"+value);

        return "ok";
    }

set
    @GetMapping("/testSet")
    @ResponseBody
    public String testSet(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForSet().add("key","111","222","333");

        Set<String> result=redisTemplate.opsForSet().members("key");
        System.out.println("result:"+result);

        boolean exists=redisTemplate.opsForSet().isMember("key","111");
        System.out.println("exists:"+exists);

        Long count=redisTemplate.opsForSet().size("key");
        System.out.println("count:"+count);

        redisTemplate.opsForSet().remove("key","111","222");
        result=redisTemplate.opsForSet().members("key");
        System.out.println("result:"+result);
        return "ok";
    }

hash
    @GetMapping("/testHash")
    @ResponseBody
    public String testHash(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForHash().put("key","f1","111");
        redisTemplate.opsForHash().put("key","f2","222");
        redisTemplate.opsForHash().put("key","f3","333");

        String value= (String) redisTemplate.opsForHash().get("key","f1");
        System.out.println("value:"+value);

        Boolean exists=redisTemplate.opsForHash().hasKey("key","f1");
        System.out.println("exists:"+exists);

        Long size=redisTemplate.opsForHash().delete("key","f1","f2");
        System.out.println("size:"+size);

        return "ok";
    }

zset
    @GetMapping("/testZSet")
    @ResponseBody
    public String testZSet(){
        redisTemplate.execute((RedisConnection connection)->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForZSet().add("key","zhangsan",10);
        redisTemplate.opsForZSet().add("key","lisi",20);
        redisTemplate.opsForZSet().add("key","wangwu",30);

        Set<String> members=redisTemplate.opsForZSet().range("key",0,-1);
        System.out.println("members:"+members);

        Set<ZSetOperations.TypedTuple<String>> memberWithScore=redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println("memberWithScore:"+memberWithScore);

        Double score=redisTemplate.opsForZSet().score("key","zhangsan");
        System.out.println("score:"+score);

        redisTemplate.opsForZSet().remove("key","zhangsan");
        Long size=redisTemplate.opsForZSet().size("key");
        System.out.println("size:"+size);

        Long rank=redisTemplate.opsForZSet().rank("key","lisi");
        System.out.println("rank:"+rank);
        return "ok";
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205935.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++ Primer Plus学习记录】循环和文本输入

目录 1.使用原始的cin进行输入 2.使用cin.get(char)进行补救 3.使用哪一个cin.get() 4.文件尾条件 循环完后的一项最常见、最重要的任务&#xff1a;逐字符地读取来自文件或键盘的文本。 cin对象支持3种不同模式的单字符输入&#xff0c;其用户接口各不相同。下面介绍如何…

一种快速设计射频功放IC流程分享

No.1设计目标 在功率放大器PA中&#xff0c;输出级以及输出匹配决定了该功放的线性度、效率等关键性能指标&#xff0c;通常被优先考虑。在这个项目中输出级功放关键性能指标如下&#xff1a; 带宽&#xff1a;12-13 GHz OP1dB>13dBm 输出级 Power gain>5dB DE_P1dB&…

K歌利器-无线K歌麦克风模组-投影K歌解决方案

麦克风K歌模组是一种用于改善音频质量的麦克风系统&#xff1b;其发展可以追溯到20世纪50年代&#xff0c;如今&#xff0c;麦克风模组的技术发展已经非常成熟&#xff0c;可以提供更为优质的音频质量&#xff1b;支持多种不同的连接方式&#xff1b;可以在不同的设备上使用。 …

获取焦点后,样式异常的处理方法

问题 在使用monaco-editor 设置代码提示未正常显示&#xff0c;提示框出现&#xff0c;看不到内容&#xff0c;如图 看不到内容&#xff0c;有两种情况&#xff1a; 情况一&#xff1a;没有得到数据&#xff0c;所以没有展示&#xff1b; 情况二&#xff1a;得到了数据&#x…

Python协程技术:从Greenlet到async/await的异步编程探索

协程&#xff1a; ​ 协程&#xff0c;在Python中&#xff0c;协程是一种轻量级的并发编程方式&#xff0c;它允许在单个线程内实现多个独立的执行流。协程可以在不同的执行点之间进行切换&#xff0c;而无需依赖于操作系统的线程切换。这使得协程成为处理高并发和异步任务的有…

AI质差小区优化效果评估

1. 下行流量/PRB利用率和贬损用户的关系 通过分析长期贬损质差小区&#xff1a;下行PRB利用率/流量和小区平均每小时质差用户数成正比例关系&#xff0c;即小区的贬损用户会随PRB利用率/流量的增长而增长。 2. 贬损用户和流量走势 年前平均每天流量平稳的情况下&#xff0c;通…

世微AP5125 DC-DC降压恒流 LED车灯电源驱动IC SOT23-6

产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器&#xff0c;适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 PWM 工作模式&#xff0c; 利用平均电流检测模式&#xff0c;因此具有优异的负载调整 率…

酵母双杂交服务专题(三)

当开始研究某个基因时&#xff0c;除了识别其功能之外&#xff0c;还必须分析它与其他蛋白质或分子的相互作用关系。这是因为基因通常不是孤立发挥作用&#xff0c;而是通过与其他蛋白或分子的互动参与调节下游基因的表达。酵母双杂交技术是检测蛋白质间相互作用的一种标准方法…

车载电源测试是什么?如何用车载电源测试系统测试?

车载电源测试是为了检测电源的各项指标和性能&#xff0c;判断其是否符合设计要求&#xff0c;满足车载设备的使用。车载电源测试项目一般包含输出电压/电流测试、效率测试、过载保护测试、稳定性和可靠性测试等。用车载电源自动化测试系统进行检测不仅可以提高测试效率&#x…

MySQL之JDBC

&#x1f495;"我像离家的孤儿,回到了母亲的怀抱,恢复了青春。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;MySQL之JDBC 一.什么是JDBC? JDBC编程就是通过Java 代码来操纵数据库 数据库编程&#xff0c; 需要数据库服务器提供一些API供程序…

主成分分析例题 (多元统计分析期末复习)

例一 给定X的协差阵&#xff0c;对其进行主成分分析, &#xff08;1&#xff09;求出每个主成分的贡献率&#xff1b; &#xff08;2&#xff09;求出每个原始变量的信息提取率&#xff1b; 解&#xff1a;对于主成分分析的题&#xff0c;一般来说&#xff0c;题目给定一个协方…

centos7 nginx_keepalived 在主备服务器上安装

脚本地址 https://gitcode.net/zengliguang/nginx_keepalived.git 文件说明keepalivedkeepalived的离线安装包nginx-1.24.0nginx的离线安装包centos7_keepalived_offline_install_backup.shkeepalved安装脚本&#xff0c;备服务器安装 centos7_keepalived_offline_install_mas…

深入解析 Python 中 Parsel 的两种数据提取方式

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在网络爬虫的世界中&#xff0c;数据提取是至关重要的一环。Python 提供了许多强大的工具&#xff0c;其中之一就是 parsel 库&#xff0c;专门用于解析和提取 HTML 或 XML 数据。本篇博客将深入探讨 parsel 中两…

Memcached最新2023年面试题,高级面试题及附答案解析

文章目录 01、Memcached是什么&#xff0c;有什么作用&#xff1f;02、Memcached的多线程是什么&#xff1f;如何使用它们&#xff1f;03、Memcached与Redis的区别&#xff1f;04、如果缓存数据在导出导入之间过期了&#xff0c;怎么处理这些数据呢&#xff1f;05、如何实现集群…

机器学习入门(第五天)——决策树(每次选一边)

Decision tree 知识树 Knowledge tree 一个小故事 A story 挑苹果&#xff1a; 根据这些特征&#xff0c;如颜色是否是红色、硬度是否是硬、香味是否是香&#xff0c;如果全部满足绝对是好苹果&#xff0c;或者红色硬但是无味也是好苹果&#xff0c;从上图可以看出来&#…

传教士与野人过河问题

代码模块参考文章&#xff1a;传教士与野人过河问题&#xff08;numpy、pandas&#xff09;_python过河问题_醉蕤的博客-CSDN博客 问题描述 一般的传教士和野人问题&#xff08;Missionaries and Cannibals&#xff09;&#xff1a;有N个传教士和C个野人来到河边准 备渡河。…

vscode集成git

1、首先电脑要安装git 打开git官网地址&#xff1a;Git进行下载&#xff0c;如下图界面&#xff1a; 如图片中描述&#xff1a;一般进入官网后会识别电脑对应系统&#xff08;识别出了我的电脑是Windows系统 。如果未识别到电脑系统&#xff0c;可在左侧选择自己电脑对应的系统…

Maven——使用Nexus创建私服

私服不是Maven的核心概念&#xff0c;它仅仅是一种衍生出来的特殊的Maven仓库。通过建立自己的私服&#xff0c;就可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构件等&#xff0c;从而高效地使用Maven。 有三种专门的Maven仓库管理软件可以用来帮助大家建立…

vue3使用动态component

使用场景&#xff1a; 多个组件通过component标签挂载在同一个组件中&#xff0c;通过触发时间进行动态切换。vue3与vue2用法不一样&#xff0c;这里有坑&#xff01; 使用方法&#xff1a; 1.通过vue的defineAsyncComponent实现挂载组件 2.component中的is属性 父组件&am…

deque容器结构学习笔记

1.结构图 2.deque对比vector和list deque双端队列&#xff0c;就像是list和vector的结合 vector&#xff1a; 优点&#xff1a;1.可以随机读取 2. 空间利用率高 缺点&#xff1a;1. 除了尾插尾删&#xff0c;其他插入删除效率比较低 2. 扩容效率低 list&#xff1a; 优点&…