I used Mnemosyne to successfully memorise thousands of foreign words. You type in all the facts you need to memorise as individual "cards" which are in a question-and-answer format. You can also download "card packs" from their website for some popular topics. You then memorise cards by reading the question, guessing the answer and then awarding yourself a score out of 5. Mnemosyne uses fancy spaced repitition algorithms to detect how well you've memorised a card, and to calculate the optimal time to show you the same card again. You need to do sessions every day though otherwise it's not so effective. Over time the number of cards you do each day gets smaller and smaller.