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

news/2024/7/9 7:48:34

目录

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://lihuaxi.xjx100.cn/news/1854139.html

相关文章

如何查看电脑内存?Windows 和 Mac 方法不同

Windows 系统查看内存方法 在 Windows 操作系统中我们查看电脑内存在哪里查呢&#xff1f;下面总结的 3 种查看电脑内存的方法都可以使用&#xff1a;使用任务管理器&#xff1a;任务管理器是 Windows 中一个强大的工具&#xff0c;可用于监视和管理计算机的性能和资源使用。使…

CAS原理详解

文章目录 1. 问题引入2. CAS底层详解1. Java中CAS实现2. CAS源码分析3. CAS操作存在的缺陷4. ABA问题及其解决方案 1. 问题引入 见下面代码 public class Main {private volatile static int sum0;public static void main(String[] args) throws InterruptedException {for …

润申信息企业标准化管理系统 SQL注入漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案&#xff0c;帮助他们实现了高效的标准法规管理&#xff0c;完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息科技企业标准化管理系统 CommentStandardHandler.as…

二进制求和

这篇文章会收录到 : 算法通关村第十三关-白银挑战数字与数学高频问题-CSDN博客 二进制求和 描述 : 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 题目 : LeetCode 67.二进制求和 : 67. 二进制求和 分析 : 这个题也是用字符串来表示数据的…

目标检测YOLO实战应用案例100讲-基于Yolo算法的单晶硅晶线检测系统

目录 前言 国内外研究现状 相关理论技术简介 2.1传统图像目标检测方法

Numpy实践_时间日期和时间增量

文章目录 datetime64 基础datetime64 和 timedelta64 运算datetime64 的应用 datetime64 基础 1.从字符串创建 datetime64 类型时&#xff0c;默认情况下&#xff0c;numpy 会根据字符串自动选择对应的单位。 import numpy as npa np.datetime64(2020-03-01) print(a, a.dty…

中职组网络安全-FTPServer20221010.img(环境+解析)

任务环境说明&#xff1a; √服务器场景&#xff1a;FTPServer20221010.img √服务器操作系统&#xff1a;未知&#xff08;关闭链接&#xff09; √FTP用户名&#xff1a;attack817 密码&#xff1a;attack817 1.分析attack.pcapng数据包文件&#xff0c;通过分析数据包attack…

牛客算法题 HJ99 自守数 golang实现

题目 HJ99 自守数 描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff1a;25^2 625&#xff0c;76^2 5776&#xff0c;9376^2 87909376。请求出n(包括n)以内的自守数的个数数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 100001≤n≤10000 输入描述&…