: Congestion of users’ demands during peak-traffic times forces the link to transfer a large amount of data with a high transmission rate in a short time and to be useless for a long time. This problem causes inefficiency of using the network. One method for overcoming this problem and reducing the transmission rate during the peak hours is "Caching". In this method, when the number of the requests is small, some contents are stored in memories (caches) which have been distributed in the network (Placement phase) and during peak hours will provide part of the users’ requests. In the second phase (Delivery phase), the server receives the demands and sends out a common message to all users, so that they can recover their requested content from this message. The bottle-neck in the placement phase is "the size of the cache memories in the network" and in the delivery phase is "the rate required to serve the requested content". Till now, caching has been studied from different viewpoints. Some studies have been focused on the delivery phase and the others have focused on the placement phase. With the first approach, for fixed cache contents and specified demands, the delivery phase is optimized. These studies are almost similar to the source coding problem with side information. In fact, the message must be coded such that all users can recover their demands by using the coded message and the available information in their own caches (as the side information). Index-coding is the most important achievement with this approach. In the index-coding problem, there are some receivers that have some bits of the other receivers in their cache and try to recover their desired message from the code which is sent by the server. The side information graph indicates the bits which are stored in the cache of each receiver. In another approach, optimization of both phases is considered. These studies are focused on the use of caching in specific applications such as "video on-demand" (VoD). In this thesis, in addition to reviewing the coded caching and decentralized coded caching methods, as the new achievements in this area, the main focus is on the study of index-coding. In particular, the importance of linear index-coding and its relationship with network coding problem is reviewed. The main question that is raised in this study and the author seeks to answer is, if some delay is tolerable such that users can wait for recovering two (or more) consecutive requests together (instead of sequential recovering), can code length be reduced by index-coding of two (or more) side information graphs in a jointly manner? Our observations shows that in some cases a significant code length reduction (approximately 50%) is possible. Specifically, an upper bound on the length of joint index code is derived in the case that union of side information graphs is the complete graph. On the other hand, there are conditions (in terms of side information graphs) that joint index coding does not result in any advantage in comparison with the conventional index coding. Keywords: Coded Caching, Source Coding with Side Information, Index Coding, Joint Index Coding.