1717import org .springframework .data .mongodb .core .query .Update ;
1818import org .springframework .data .mongodb .gridfs .GridFsOperations ;
1919import org .springframework .data .mongodb .gridfs .GridFsTemplate ;
20+ import org .springframework .data .redis .core .RedisTemplate ;
2021import org .springframework .stereotype .Service ;
2122import org .springframework .web .multipart .MultipartFile ;
2223
2526import java .io .InputStream ;
2627import java .sql .Timestamp ;
2728import java .util .ArrayList ;
29+ import java .util .HashMap ;
2830import java .util .List ;
2931import java .util .Map ;
3032
@@ -40,6 +42,11 @@ public class VideoService {
4042 @ Autowired
4143 private MongoTemplate mongoTemplate ;
4244
45+ @ Autowired
46+ private RedisTemplate <String , Object > redisTemplate ;
47+
48+ private final String VIDEO_CACHE_PREFIX = "video_" ;
49+
4350 public String addVideo (MultipartFile upload , String userID , byte [] thumbnail , Timestamp timestamp , String description , String userName , String videoName )
4451 throws IOException {
4552 DBObject videoMetadata = new BasicDBObject ();
@@ -64,6 +71,17 @@ public String addVideo(MultipartFile upload, String userID, byte[] thumbnail, Ti
6471 template .store (new ByteArrayInputStream (thumbnail ), upload .getOriginalFilename () + "_thumbnail" , "image/png" ,
6572 thumbnailMetadata );
6673
74+
75+ // Save video information to Redis
76+ Map <String , Object > videoDetails = new HashMap <>();
77+ videoDetails .put ("videoId" , videoID .toString ());
78+ videoDetails .put ("userID" , userID );
79+ videoDetails .put ("title" , videoName );
80+ videoDetails .put ("description" , description );
81+ videoDetails .put ("views" , 0 );
82+ redisTemplate .opsForHash ().putAll (VIDEO_CACHE_PREFIX + videoID .toString (), videoDetails );
83+
84+
6785 return videoID .toString ();
6886 }
6987
@@ -149,11 +167,25 @@ public void setInputStream(InputStream inputStream) {
149167 }
150168
151169 public Map <String , Object > getDetails (String videoId ) {
170+ // Checked data in Redis
171+ Map <Object , Object > cachedVideo = redisTemplate .opsForHash ().entries (VIDEO_CACHE_PREFIX + videoId );
172+
173+ if (!cachedVideo .isEmpty ()) {
174+ // Convert cachedVideo to Map<String, Object>
175+ Map <String , Object > stringKeyVideoMap = new HashMap <>();
176+ cachedVideo .forEach ((key , value ) -> stringKeyVideoMap .put (String .valueOf (key ), value ));
177+ return stringKeyVideoMap ;
178+ }
179+
152180 Query query = new Query (Criteria .where ("_id" ).is (videoId ));
153181 DBObject dbObject = mongoTemplate .findOne (query , DBObject .class , "fs.files" );
154182 if (dbObject != null ) {
155- return dbObject .toMap ();
183+ Map <String , Object > videoDetails = dbObject .toMap ();
184+ // Save video information to Redis
185+ redisTemplate .opsForHash ().putAll (VIDEO_CACHE_PREFIX + videoId , videoDetails );
186+ return videoDetails ;
156187 }
188+
157189 return null ;
158190 }
159191
0 commit comments