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

news2024/12/23 22:48:38

目录

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";
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试 —— 如何优雅实现方法的依赖!

在 seldom 3.4.0 版本实现了该功能。 在复杂的测试场景中&#xff0c;常常会存在用例依赖&#xff0c;以一个接口自动化平台为例&#xff0c;依赖关系&#xff1a; 创建用例 --> 创建模块 --> 创建项目 --> 登录。 用例依赖的问题 •用例的依赖对于的执行顺序有严格…

好用的chatgpt工具用过这个比较快

chatgpthttps://www.askchat.ai?r237422 chatGPT能做什么 1. 对话和聊天&#xff1a;我可以与您进行对话和聊天&#xff0c;回答您的问题、提供信息和建议。 2. 问题回答&#xff1a;无论是关于事实、历史、科学、文化、地理还是其他领域的问题&#xff0c;我都可以尽力回答…

医疗机构临床数据合规共享解决方案斩获“金智奖”年度优秀方案奖

11月24日&#xff0c;以“并肩聚力&#xff0c;协同创新&#xff0c;共谋网络安全产业新发展”为主题的2022—2023年度中国网络安全与信息产业“金智奖”&#xff08;以下简称&#xff1a;“金智奖”&#xff09;颁奖盛典隆重举行。美创科技—医疗机构临床数据合规共享解决方案…

基于javaweb的宠物服务商城系统设计与开发

摘 要 最近几年以来&#xff0c;宠物在人们的日常生活中所占的地位越来越重要了&#xff0c;它们不仅仅是我们的朋友&#xff0c;也成为了我们家庭中的一份子。21世纪&#xff0c;信息技术飞速发展&#xff0c;计算机行业日新月异&#xff0c;极大地带动了信息的流动&#xff…

跨境电商成拼多多高质量增长奇兵

不曾想到&#xff0c;拼多多增长仍如此迅猛。 11月28日&#xff0c;拼多多发布第三季度财报&#xff0c;数据显示&#xff0c;营收688.404亿元&#xff0c;同比增长94%&#xff0c;超过市场预估的548.7亿元&#xff1b;实现美国通用会计准则口径净利润155.37亿元&#xff0c;同…

代码demo-内部订单批量投料

为了简化用户操作&#xff0c;开发内部订单批量投料功能 用户可以批量上传&#xff0c;或者选择对应的物料&#xff0c;输入库位和内部订单号后进行过账操作 对用户选择的内部订单做校验&#xff0c;内部订单是否正确 内部订单的公司是否和工厂对应的公司一致等等 下面展示…

护眼灯对眼睛有好处吗?考公护眼台灯推荐

根据国家卫健委发布的最新数据&#xff0c;目前我国儿童青少年近视率已经达到了相当高的水平。其中&#xff0c;小学生的视力问题占比接近40%&#xff0c;高中生和大学生的近视率则超过70%并且逐年上升。可以说10个学生里面就有7个学生入手一副眼镜。 为了避免这一现象的加深&a…

【Java】文件I/O-字节流转换成字符流

上文中我们讲了Reader&#xff0c;Writer&#xff0c;InputStream&#xff0c;OutputStream这四种流的基本用法&#x1f522; 【Java】文件I/O-文件内容操作-输入输出流-Reader/Writer/InputStream/OutputStream四种流 其中InputStream和OutputStream两个类涉及到的都是byte&…

Small Data Transmission(一) overview

在R16之前,RRC Inactive 不支持数据传输,UE在RRC inactive状态有data要传输时,就要通过RRC resume过程,转换到RRC connected mode才能进行数据传输。 有时候UE要传输的数据包可能会很小,且发送频率也很低,如果每次发送数据都要进行上述过程,就会增加不必要的功耗和信令…

会泽一村民上山放羊吸烟引发森林火灾,AI科技急需关注

2023年4月&#xff0c;会泽县古城街道厂沟村委会望香台山林中发生了一场由疏忽引发的森林火灾。张某某在放羊时未完全熄灭烟头&#xff0c;导致7.33公顷的林地和草地被焚毁&#xff0c;直接经济损失高达29.097万元。这一事件再次凸显了日常生活中的安全隐患。 在这一背景下&…

基于 Gin 的 HTTP 代理 Demo(2)

一周后勘误&#xff1a; 我这里实现的严格来说还是 HTTP 代理&#xff0c;只不过是通过隧道的方式传输非 HTTP 的流量&#xff0c;这里是 HTTPS 流量。尽管它可以传输 HTTPS 流量&#xff0c;它也不算是 HTTPS 代理。 上次写了 基于 Gin 的 HTTP 代理 Demo 之后&#xff0c;对…

如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!

目录 1. 前言 2. 本地FTP搭建 2.1 Serv-U下载和安装 2.2 Serv-U共享网页测试 2.3 Cpolar下载和安装 3. 本地FTP发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4. 公网访问测试 5. 总结 1. 前言 科技日益发展的今天&#xff0c;移动电子设备似乎成了我们生活的主角&am…

【算法每日一练]-图论(保姆级教程篇9 最小生成树 ,并查集篇)#道路修建 #兽径管理

目录 题目&#xff1a;道路修建 思路&#xff1a; 题目&#xff1a;兽径管理 思路&#xff1a; 题目&#xff1a;道路修建 思路&#xff1a; “让这些点全部连在一起的最小代价”很明显是最小生成树。绝对不能kruskal&#xff0c;存边一定会超内存。所以只能prim。 但是…

明基|书客|松下护眼台灯值不值得买?爆款多维度测评揭晓!

随着近视率越来越高的现象&#xff0c;护眼台灯逐渐成为大多数家庭的日常所需&#xff0c;许多护眼台灯品牌为了降低价格吸引消费者而不惜大程度上降低材料品质&#xff0c;导致台灯寿命减短&#xff0c;光线变差等问题频发&#xff0c;这也让广大对于如何选择一款好的护眼台灯…

职业测评链接

职业测评链接&#xff1a; https://www.16personalities.com/ch?utm_sourceresults-turbulent-campaigner&amp%3Butm_mediumemail&amp%3Butm_campaignch&amp%3Butm_contentlogo-0

性能测试线上监控

如果你的产品出现了一个线上问题&#xff0c;你会是怎么样的反应&#xff1f; 也许会跟下面这张图一样。 哇&#xff01;有一个线上bug&#xff0c;好慌呀&#xff01;&#xff01; 咦&#xff0c;问题似乎自动解决了&#xff1f;渐渐冷静。 不对&#xff01;&#xff01;&a…

2023-11-30 AIGC-让图片动起来的主流 AI 工具

摘要&#xff1a; 2023-11-30 AIGC-让图片动起来的主流 AI 工具 让图片动起来的主流 AI 工具 一、数字人播报 1、HeyGen 2、D-ID 3、SadTalker 二、图片生成视频 1、Runway Gen-2 2、Pika Labs 3、Genmo 三、伪3D动态效果 1、LeiaPix 2、剪映手机版 四、角色动画 Animated …

样品实验K-KAT348羧酸铋催化剂TDS说明书

样品实验K-KAT348羧酸铋催化剂TDS说明书 50克 100克 200克

【Axure教程】用中继器制作多选树

“多选树”可能指的是一种用户界面元素&#xff0c;用于展示层级结构并允许用户选择多个节点。这在软件应用程序中常用于设置、文件浏览器等场景。 Axure里面虽然自带了一个树元件&#xff0c;但是并没有多选的功能&#xff0c;所以今天就教大家如何用中继器制作一个多选树的基…

【动态规划】01第 N 个泰波那契数(easy)

题目链接 &#xff1a;leetcode第 N 个泰波那契数 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求第n个数的泰波那契数。 由题可得&#xff1a; 我们可以把它改写为&#…