How to save image in redis using java / spring

I am using redis and spring framework on my image upload server. I need to save images in redis. I found the following question, but that was for python.
how to save image in redis using python / PIL

I'm not sure if this is the best way, but I would like to know how to do it in java (preferably using the spring framework). I am using spring-data-redis which uses jedis.

I would like to know if a redis image storage strategy is good.

+4
source share
3 answers

Redis is binary, so in the case of Jedis, you can use BinaryJedis to store binary data just like any other kind of value that you store in Redis.

And no, I donโ€™t think that storing images in Redis and therefore in memory is a good strategy. This should be a very special precedent.

+5
source

Convert the image to a base64 string and save it to redis as a pair of key values. How to convert an image to a base64 string can be found here http://ben-bai.blogspot.in/2012/08/java-convert-image-to-base64-string-and.html

+1
source

First of all, Redis is not a good option for storing images. Redis inmemory, so it would not be a good step to place files such as images in memory.

If you want to enter images, you can use it as follows

Following are the steps

1) make your maven pom.xml with the following banks

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.3.0.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.0</version> </dependency> 

2) do the xml configuration as follows

 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="localhost" p:port="6379" p:password="" /> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jeidsConnectionFactory" /> <bean id="imageRepository" class="com.self.common.api.poc.ImageRepository"> <property name="redisTemplate" ref="redisTemplate"/> </bean> </beans> 

3) Make your classes as follows

 package com.self.common.api.poc; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class RedisMainApp { public static void main(String[] args) throws IOException { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mvc-dispatcher-servlet.xml"); ImageRepository imageRepository = (ImageRepository) applicationContext.getBean("imageRepository"); BufferedImage img = ImageIO.read(new File("files/img/TestImage.png")); BufferedImage newImg; String imagestr; imagestr = encodeToString(img, "png"); Image image1 = new Image("1", imagestr); img = ImageIO.read(new File("files/img/TestImage2.png")); imagestr = encodeToString(img, "png"); Image image2 = new Image("2", imagestr); imageRepository.put(image1); System.out.println(" Step 1 output : " + imageRepository.getObjects()); imageRepository.put(image2); System.out.println(" Step 2 output : " + imageRepository.getObjects()); imageRepository.delete(image1); System.out.println(" Step 3 output : " + imageRepository.getObjects()); } /** * Decode string to image * @param imageString The string to decode * @return decoded image */ public static BufferedImage decodeToImage(String imageString) { BufferedImage image = null; byte[] imageByte; try { BASE64Decoder decoder = new BASE64Decoder(); imageByte = decoder.decodeBuffer(imageString); ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); image = ImageIO.read(bis); bis.close(); } catch (Exception e) { e.printStackTrace(); } return image; } /** * Encode image to string * @param image The image to encode * @param type jpeg, bmp, ... * @return encoded string */ public static String encodeToString(BufferedImage image, String type) { String imageString = null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ImageIO.write(image, type, bos); byte[] imageBytes = bos.toByteArray(); BASE64Encoder encoder = new BASE64Encoder(); imageString = encoder.encode(imageBytes); bos.close(); } catch (IOException e) { e.printStackTrace(); } return imageString; } } package com.self.common.api.poc; public class Image implements DomainObject { public static final String OBJECT_KEY = "IMAGE"; public Image() { } public Image(String imageId, String imageAsStringBase64){ this.imageId = imageId; this.imageAsStringBase64 = imageAsStringBase64; } private String imageId; private String imageAsStringBase64; public String getImageId() { return imageId; } public void setImageId(String imageId) { this.imageId = imageId; } public String getImageName() { return imageAsStringBase64; } public void setImageName(String imageAsStringBase64) { this.imageAsStringBase64 = imageAsStringBase64; } @Override public String toString() { return "User [id=" + imageAsStringBase64 + ", imageAsBase64String=" + imageAsStringBase64 + "]"; } @Override public String getKey() { return getImageId(); } @Override public String getObjectKey() { return OBJECT_KEY; } } package com.self.common.api.poc; import java.io.Serializable; public interface DomainObject extends Serializable { String getKey(); String getObjectKey(); } package com.self.common.api.poc; import java.util.List; import com.self.common.api.poc.DomainObject; public interface Repository<V extends DomainObject> { void put(V obj); V get(V key); void delete(V key); List<V> getObjects(); } package com.self.common.api.poc; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import com.self.common.api.poc.DomainObject; public class ImageRepository implements Repository<Image>{ @Autowired private RedisTemplate<String,Image> redisTemplate; public RedisTemplate<String,Image> getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate<String,Image> redisTemplate) { this.redisTemplate = redisTemplate; } @Override public void put(Image image) { redisTemplate.opsForHash() .put(image.getObjectKey(), image.getKey(), image); } @Override public void delete(Image key) { redisTemplate.opsForHash().delete(key.getObjectKey(), key.getKey()); } @Override public Image get(Image key) { return (Image) redisTemplate.opsForHash().get(key.getObjectKey(), key.getKey()); } @Override public List<Image> getObjects() { List<Image> users = new ArrayList<Image>(); for (Object user : redisTemplate.opsForHash().values(Image.OBJECT_KEY) ){ users.add((Image) user); } return users; } } 

For more information about sprinf jedis you can see http://www.javacodegeeks.com/2012/06/using-redis-with-spring.html

Sample code is taken from http://javakart.blogspot.in/2012/12/spring-data-redis-hello-world-example.html

0
source

Source: https://habr.com/ru/post/1494007/


All Articles