欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis如何存儲對象

 更新時間:2022年06月16日 11:47:19   作者:酷愛編程的小猿同學(xué)  
這篇文章主要介紹了Redis如何存儲對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Redis存儲對象

在以往面試中,多次被問到Redis怎么存儲對象,我支支吾吾半天回答不上來,畢竟我只用過String類型,為了避免以后的尷尬,今天花點時間來整理一下。

本人用的Jedis客戶端

首先引入依賴

? ? ? ? <dependency>
? ? ? ? ? ? <groupId>redis.clients</groupId>
? ? ? ? ? ? <artifactId>jedis</artifactId>
? ? ? ? ? ? <version>3.2.0</version>
? ? ? ? </dependency>

創(chuàng)建一個Jedis實例

package com.xiateng.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
/**
 * jedis獲取工具類
 */
public class JedisUtil { 
    private static JedisPool jedisPool;
    private static final Logger logger = LoggerFactory.getLogger(JedisUtil.class);
 
    static {
        // 初始化連接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(20);
        jedisPoolConfig.setMaxIdle(10);
        jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
        logger.info("jedisPool連接池初始化====" + jedisPool);
    }
 
    /**
     * 獲取一個Jedis實例
     * @return
     */
    public synchronized static Jedis getJedis(){
        Jedis jedis = jedisPool.getResource();
//        jedis.auth("123456");//密碼
        return jedis;
    }
}

下面我們來實現(xiàn)存儲對象

方式一:將對象轉(zhuǎn)化為JSON字符串存入redis

Jedis jedis = JedisUtil.getJedis();
TUser tUser = new TUser();
tUser.setUserName("你好");
tUser.setPassword("2342342");
jedis.set("xiateng", JSON.toJSONString(tUser));
?
String sss = jedis.get("xiateng");
TUser ssss = JSON.parseObject(sss,TUser.class);
jedis.del("xiateng");
System.out.println("---------------------------: ?"+ssss.toString());

方式二:將對象序列化后存到redis

封裝序列化跟反序列化方法

package com.xiateng.util; 
import java.io.*; 
public class SerializeUtil {
 
    /**
     * 序列化操作
     * @param object
     * @return
     */
    public static byte[] serialize(Object object){
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
            // 序列化
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
 
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return null;
    }
 
    /**
     * 反序列化操作
     * @param bytes
     * @return
     */
    public static Object unSerialize(byte[] bytes){
        ByteArrayInputStream bais = null;
 
        try {
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        return null;
    }
}

保存對象

Jedis jedis = JedisUtil.getJedis(); ? ? ?
jedis.set("code".getBytes(), SerializeUtil.serialize(tUser));
byte[] bytes = jedis.get("code".getBytes());
TUser o = (TUser)SerializeUtil.unSerialize(bytes);
jedis.del("code");
System.out.println(o.toString());

方式三:將對象用Hash數(shù)據(jù)類型存儲

Jedis jedis = JedisUtil.getJedis();
jedis.hset("user", "id", "3");
jedis.hset("user", "name", "xiateng");
jedis.hset("user", "password", "123455");
jedis.hget("user","id");
List<String> user = jedis.hmget("user", new String[]{"id","name","password"});
System.out.println("---------------------------: ?"+user);
?
// 輸出結(jié)果 [3,xiateng,123455]

注意:以序列化的方式存儲的對象需要實現(xiàn) Serializable 接口

Redis可以存儲java對象嗎

答案:是可以

但是你對象必須要序列化。

redis沒有辦法把一個沒有序列化的對象存儲到redis中。

package com.kuangstudy.entiy;
import lombok.Data;
public class User implements java.io.Serializable{
    private Integer id;
    private String nickname;
    private String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

這樣太麻煩了,并且存儲中文會有亂碼,那如何解決呢?只能重新定義一個redisTemplate

package com.kuangstudy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfiguration {
    /**
     * @return org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
     * @Author 徐柯
     * @Description 改寫redistemplate序列化規(guī)則
     * @Date 13:20 2021/5/20
     * @Param [redisConnectionFactory]
     **/
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 創(chuàng)建一個json的序列化方式
        GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 設(shè)置value用jackjson進(jìn)行處理
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // 設(shè)置key用string序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Redis命令操作數(shù)據(jù)庫的常見錯誤及解決方法

    使用Redis命令操作數(shù)據(jù)庫的常見錯誤及解決方法

    由于Redis是內(nèi)存數(shù)據(jù)庫,因此可能會存在一些安全問題,下面這篇文章主要給大家介紹了關(guān)于使用Redis命令操作數(shù)據(jù)庫的常見錯誤及解決方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • CentOS Linux系統(tǒng)下安裝Redis過程和配置參數(shù)說明

    CentOS Linux系統(tǒng)下安裝Redis過程和配置參數(shù)說明

    這篇文章主要介紹了CentOS Linux系統(tǒng)下安裝Redis過程和配置參數(shù)說明,需要的朋友可以參考下
    2014-10-10
  • Redis實現(xiàn)UV統(tǒng)計的示例代碼

    Redis實現(xiàn)UV統(tǒng)計的示例代碼

    本文主要介紹了Redis實現(xiàn)UV統(tǒng)計的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • spring?boot集成redis基礎(chǔ)入門實例詳解

    spring?boot集成redis基礎(chǔ)入門實例詳解

    redis在spring?boot項目開發(fā)中是常用的緩存套件,常見使用的是spring-boot-starter-data-redis,這篇文章主要介紹了spring?boot集成redis基礎(chǔ)入門,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 淺談Redis安全策略

    淺談Redis安全策略

    Redis 提供了諸多安全策略,比如為了保證數(shù)據(jù)安全,提供了設(shè)置密碼的功能。本文就詳細(xì)的介紹了一下Redis安全策略,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • 一文帶你了解Redis怎么啟動以及使用

    一文帶你了解Redis怎么啟動以及使用

    對于Redis我們一般會使用到三種啟動方式:直接啟動、指定配置文件啟動、開機(jī)自啟動,下面這篇文章主要給大家介紹了關(guān)于Redis怎么啟動以及使用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 最新評論