Force ‘permanent’ post cache of shortcode results

You’d want to look up transients
Here’s a simple example of how you do it.

function showPosts (){
    $posts = get_transient ("my_rss_transient");
    If (!$posts){$posts=getPosts ();}
    /* do showing off stuff here */
}

function getPosts (){
    $posts = /* get posts here*/
    Set_transient ("my_rss_transient", $posts, MONTH_IN_SECONDS);
     return $posts
}

The transient should be saved for each month.
Sorry for the bad formatting.

EDIT: I agree with mark in the comments. Look up his way of doing it rather than this.