Microsoft releases new Redis on Windows

A few weeks ago, Microsoft announced that it had launched a new company, Microsoft Open Technologies Inc. The idea was to launch a new group that would allow Microsoft to "release open source software, participate in existing open source efforts, and accept contributions from the community."

Today, Microsoft released the first software under its new Microsoft Open Technologies program. It's a new and, Microsoft says, a "significant iteration" of the Redis on Windows program. Redis is an open source advanced key-value store.

The Interoperability @ Microsoft blog states:

The major improvements in this latest version involve the process of saving data on disk. Redis on Linux uses an OS feature called Fork/Copy On Write. This feature is not available on Windows, so we had to find a way to be able to mimic the same behavior without changing completely the save on disk process so as to avoid any future integration issues with the Redis code.

The new Redis on Windows can be downloaded from the new MS Open Tech repository in GitHub. Microsoft adds that it does not consider this new version to be "...production ready code, but a solid code base to be shared with the community to solicit feedback."

Report a problem with article
Previous Story

Study: Windows 8 gaining market share

Next Story

EA stock rises on Nexon acquisition rumors

15 Comments

Commenting is disabled on this article.

The blog is incorrect... Win32 does not support fork, Windows NT does.

The funny (?) part is there are people in the NT kernel group that probably want to slap whoever wrote the blog.

Since Linux is the equivalent of the NT layers of Windows, it is kind of silly to compare two different environments as the same, as it just confuses people and conflates Win32 and Windows NT layers.

By trying to keep this an application level project and using the Win32 creation processes (I assume), they are giving up the ability to implement fork/copy on write using NT - which is application accessible outside of Win32.

Windows NT's allocation and process creation are actually more robust/efficient than Linux especially when comparing something like Fork/Copy on Write. **

However, at the Win32 level, using the upper level process creation is not as efficient as Linux, as it is happening in the Win32 subsystem through the Win32 kernel layer that they uses NT various API calls through the NT layers.

Windows (NT) does copy on write and fork operations all the time, and goes back to NT 3.1, and appeared for upper service use for more complex concepts around 3.51 or 4.0.

I hope they update the blog, as it will make a Microsoft Windows kernel engineer do a spit take.

**(This becomes exponentially noticeable when you start dealing with a massive number of threads/processes on multi-cpu/core systems that have 8 or more CPUs available. Linux starts to choke in its own overhead around 16 or 32 CPUs, where NT doesn't even cough at 64 CPUs, and doesn't Choke until it hits about 256 CPUs.

As the current strategy is to through more cores/cpus for performance, this is becoming a major issue and difference at the enterprise and in a couple of years the home user base as well. This contrast is also affecting OS X, as the Apple bastardization to the darwin kernel in 1999 to get better single cpu 'threading' destroyed the very nature of SMP on the XNU kernel.)

Edited by thenetavenger, Apr 27 2012, 5:29am :

thenetavenger said,
The blog is incorrect... Win32 does not support fork, Windows NT does.

I could be wrong here, but I thought Windows NT uses the same Win32 API? Also I've never heard of fork being supported on Windows OTB. In fact Microsoft's attempt at supporting the POSIX standard has been terrible. Your only way to run your program with true POSIX support on the Windows platform is by using Cygwin.

thenetavenger said,

Since Linux is the equivalent of the NT layers of Windows

There's nothing remotely similar between NT and Linux. Microsoft refuses to add real POSIX support to Windows.

thenetavenger said,

By trying to keep this an application level project and using the Win32 creation processes (I assume), they are giving up the ability to implement fork/copy on write using NT - which is application accessible outside of Win32.

I don't understand your obsession with NT. NT is long gone. You have the Win32 API and that's it. The Win32 API doesn't have a fork, or any other part of the POSIX standard that applies across OS X, GNU/Linux, BSD, or Unix. Windows is alone in a sea of compatible operating systems.

thenetavenger said,

Windows NT's allocation and process creation are actually more robust/efficient than Linux especially when comparing something like Fork/Copy on Write. **

Incorrect. Process creation is verifiably more expensive on Windows than it is on Linux. That's why fork is so prevalent in Linux. Creating a Win32 process in C is ugly as sin, not to mention very slow.

simplezz said,
I don't understand your obsession with NT. NT is long gone.

NT is not long gone. Windows 7 is NT 6.1 and Windows 8 is NT 6.2

theefool said,

NT is not long gone. Windows 7 is NT 6.1 and Windows 8 is NT 6.2

No one uses those names now. It only refers to the kernel. Developers interact with WIndows through the Win32 API, and end users see Windows 7/8 or just the build numbers. Kernel versioning is only important to Microsoft.

simplezz said,
Kernel versioning is only important to Microsoft.

And anyone who's developing against those API's as they'll need to determine what's available and what's not, depending on what flavor of Windows they're running. The API calls typically used (GetVersionEx for C++ or System.Environment.OSVersion for dotNET) returns the NT version number, not the retail name of the product.

Or you could just use a real database engine like sqlite3 and create it in memory instead of on disk:

sqlite3_open(":memory:", &db);

simplezz said,
sqlite3_open(":memory:", &db);

Last I checked (it's been a while for SQLite for me), SQLite's in-memory database is just that, and has no persistence. You'll need to do sqlite3_backup_init(), step and finish (plus any error handling) on your own to make a copy of the database on disk. This one works out of memory but persists to disk on its own via timed or manual snapshots transparently. Couldn't say if there's any benefit besides perhaps being easier to work with, never experimented with Redis.

simplezz said,
Or you could just use a real database engine like sqlite3 and create it in memory instead of on disk:

sqlite3_open(":memory:", &db);

Um, you really don't get this...

simplezz said,
Or you could just use a real database engine like sqlite3 and create it in memory instead of on disk:

sqlite3_open(":memory:", &db);

you bash MS everytime, and now they released something open source you are still screaming. Rest Mac norris have explain well.

Would be awesome with more details about the program and what it does in the article. I still don't understand, and it is kind of important if you ask me.

ffMathy said,
Would be awesome with more details about the program and what it does in the article. I still don't understand, and it is kind of important if you ask me.

In the time it took you to type that, you could have looked it up on the Wiki. Since you didn't, it obviously wasn't very important to you.

Tweaky Nippleton said,

In the time it took you to type that, you could have looked it up on the Wiki. Since you didn't, it obviously wasn't very important to you.

It's kind of important for the article, not him.

ffMathy said,
Would be awesome with more details about the program and what it does in the article. I still don't understand, and it is kind of important if you ask me.

It is basically similar to memcached, which stores data by a key, which is why its called key to value storage.

Bassem said,

It's kind of important for the article, not him.


The article already states what Redis is - a key-value storage system (it's right there mid-article). Now, the article is about the version of Redis MS released to the public, even more since it was done through their open source branch. It's not about key-value storage systems, so, no it does not need to go into further details.

georgevella said,

The article already states what Redis is - a key-value storage system (it's right there mid-article). Now, the article is about the version of Redis MS released to the public, even more since it was done through their open source branch. It's not about key-value storage systems, so, no it does not need to go into further details.

I don't think it's unreasonable to expect an article about a new release of a software product to explain what that product is... In fact, I would consider this to be standard for any sort of article such as this. It's absurd to not expect that honestly.