当前位置:   article > 正文

Redis:存储对象的两种方式(序列化和json字符串)_redis 存储对象 用序列化还是json

redis 存储对象 用序列化还是json

方式一:序列化操作

  1. public class SerializeUtil {
  2. /*
  3. * 序列化
  4. * */
  5. public static byte[] serizlize(Object object){
  6. ObjectOutputStream oos = null;
  7. ByteArrayOutputStream baos = null;
  8. try {
  9. baos = new ByteArrayOutputStream();
  10. oos = new ObjectOutputStream(baos);
  11. oos.writeObject(object);
  12. byte[] bytes = baos.toByteArray();
  13. return bytes;
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }finally {
  17. try {
  18. if(baos != null){
  19. baos.close();
  20. }
  21. if (oos != null) {
  22. oos.close();
  23. }
  24. } catch (Exception e2) {
  25. e2.printStackTrace();
  26. }
  27. }
  28. return null;
  29. }
  30. /*
  31. * 反序列化
  32. * */
  33. public static Object deserialize(byte[] bytes){
  34. ByteArrayInputStream bais = null;
  35. ObjectInputStream ois = null;
  36. try{
  37. bais = new ByteArrayInputStream(bytes);
  38. ois = new ObjectInputStream(bais);
  39. return ois.readObject();
  40. }catch(Exception e){
  41. e.printStackTrace();
  42. }finally {
  43. try {
  44. } catch (Exception e2) {
  45. e2.printStackTrace();
  46. }
  47. }
  48. return null;
  49. }
  50. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

获取jedis实例

  1. public class RedisConnection {
  2. private static String HOST = "127.0.0.1";
  3. private static int PORT = 6379;
  4. private static int MAX_ACTIVE = 1024;
  5. private static int MAX_IDLE = 200;
  6. private static int MAX_WAIT = 10000;
  7. private static JedisPool jedisPool = null;
  8. /*
  9. * 初始化redis连接池
  10. * */
  11. private static void initPool(){
  12. try {
  13. JedisPoolConfig config = new JedisPoolConfig();
  14. config.setMaxTotal(MAX_ACTIVE);//最大连接数
  15. config.setMaxIdle(MAX_IDLE);//最大空闲连接数
  16. config.setMaxWaitMillis(MAX_WAIT);//获取可用连接的最大等待时间
  17. jedisPool = new JedisPool(config, HOST, PORT);
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. /*
  23. * 获取jedis实例
  24. * */
  25. public synchronized static Jedis getJedis() {
  26. try {
  27. if(jedisPool == null){
  28. initPool();
  29. }
  30. Jedis jedis = jedisPool.getResource();
  31. jedis.auth("redis");//密码
  32. return jedis;
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. return null;
  36. }
  37. }
  38. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

redis操作

  1. public class RedisOps {
  2. public static void set(String key,String value){
  3. Jedis jedis = RedisConnection.getJedis();
  4. jedis.set(key, value);
  5. jedis.close();
  6. }
  7. public static String get(String key){
  8. Jedis jedis = RedisConnection.getJedis();
  9. String value = jedis.get(key);
  10. jedis.close();
  11. return value;
  12. }
  13. public static void setObject(String key,Object object){
  14. Jedis jedis = RedisConnection.getJedis();
  15. jedis.set(key.getBytes(), SerializeUtil.serizlize(object));
  16. jedis.close();
  17. }
  18. public static Object getObject(String key){
  19. Jedis jedis = RedisConnection.getJedis();
  20. byte[] bytes = jedis.get(key.getBytes());
  21. jedis.close();
  22. return SerializeUtil.deserialize(bytes);
  23. }
  24. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

实体类

  1. public class User implements Serializable{
  2. private static final long serialVersionUID = -3210884885630038713L;
  3. private int id;
  4. private String name;
  5. public User(){
  6. }
  7. public User(int id,String name){
  8. this.id = id;
  9. this.name = name;
  10. }
  11. //setter和getter方法
  12. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试用例

  1. public class RedisTest {
  2. @Test
  3. public void testString(){
  4. RedisOps.set("user:1", "sisu");
  5. String user = RedisOps.get("user:1");
  6. Assert.assertEquals("sisu", user);
  7. }
  8. @Test
  9. public void testObject(){
  10. RedisOps.setObject("user:2",new User(2,"lumia"));
  11. User user = (User)RedisOps.getObject("user:2");
  12. Assert.assertEquals("lumia", user.getName());
  13. }
  14. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

方式二:使用fastjson将对象转为json字符串后存储

  1. public class RedisOps {
  2. public static void setJsonString(String key,Object object){
  3. Jedis jedis = RedisConnection.getJedis();
  4. jedis.set(key, JSON.toJSONString(object));
  5. jedis.close();
  6. }
  7. public static Object getJsonObject(String key,Class clazz){
  8. Jedis jedis = RedisConnection.getJedis();
  9. String value = jedis.get(key);
  10. jedis.close();
  11. return JSON.parseObject(value,clazz);
  12. }
  13. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试:

  1. @Test
  2. public void testObject2(){
  3. RedisOps.setJsonString("user:3", new User(3,"xiaoming"));
  4. User user = (User)RedisOps.getJsonObject("user:3",User.class);
  5. Assert.assertEquals("xiaoming", user.getName());
  6. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/590376
推荐阅读
相关标签
  

闽ICP备14008679号