an F# key-value store

An F# key-value store

Fredis.net is, or may be some time in the future, an F# clone of the Redis NoSQL db. I am building Fredis.net to improve my F# and blog about the experience, not because I expect it to be used in anger.

I’ve been programming professionally for 19 years, for most of that time as a banking contractor in London. I’ve drunk the functional programming kool-aid, completed the FP101x mooc and strongly suspect that learning functional programming makes people into better programmers and a happier ones as a result.

I picked F# for no particular reason, I may well have learnt as much by exploring Scala and maybe more by taking my Haskell past what I picked up in FP101x, but I was doing C# in my day job so F# seemed a natural choice. I’ve been programming in F# seriously, but in my own time, since 2011. My most significant project before Fredis.net being an arbitrage engine for online betting exchanges, which would make pairs of bets on Betdaq and Betfair to in theory make a guaranteed profit. This was a very good project to learn from, but arbitrage opportunities are rare so it didn’t make money.

Banking development is not always as interesting as development could and should be. To avoid mental stagnation and to improve my F# skills in particular and programming skills in general, it has been necessary to give myself interesting work to do. Thinking of something to build is not always easy, but I haven’t worked with key-value stores before and would like to learn about them, so I decided to make a clone of Redis and call it Fredis.net. This will be demanding enough to be interesting, and also interesting in terms of performance and the number of lines of code required. Redis is written in C and it’s probably impossible for a program written in a managed, functional language to get close to Redis’s performance, but I want to see how close I can get. F# does make programming using async IO relatively easy, and IO completion ports on Windows may have advantages over the Unix style IO multiplexing used by Redis.