• Stars
    star
    111
  • Rank 314,510 (Top 7 %)
  • Language
    JavaScript
  • Created over 13 years ago
  • Updated over 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An evented, in-process key/value store for small volatile working sets in Node.js or the Browser

Alt text

Synopsis

EventVat is an evented in-process key/value store with an API like that of Redis. It's event based, which means that when a method is called that affects the data, corresponding events will be raised. It supports 5 data types, Strings, Numbers, Booleans, Arrays and Hashes.

Motivation

  • A datastore for small, volitile working sets
  • For processes who do not share data, it reduces unnecessary trips across the process boundary.
  • Portability, works in the browser and on the server.
  • Write to any storage end-point (such as local browser storage, a filesystem or couchdb).

Installation

$npm install eventvat

Usage

Each new instance of EventVat is a hash. There are lots of convenient methods attached to each new instance.

events

EventVat uses EventEmitter2. Listeners can attached to an EventVat object. An EventVat object can emit and event and a listener will respond. An event has three characteristics, the event name, a listener and an associated data key or wildcard.

  var vat = EventVat();

  vat.on('get foo', function(key, value) {

    console.log('`' + key + '` has the value: `' + value + '`');
  });

  vat.set('foo', 'hello, world');
  vat.get('foo');

API

instance methods

publish()

Synonymous with EventEmitter2.prototype.emit

subscribe()

Synonymous with EventEmitter2.prototype.on

unsubscribe()

Synonymous with EventEmitter2.prototype.removeListener

die(key)

Expire a key

del(key /* ... */)

Delete a key

exists(key)

Determine if a key exists

expire(key, ttl)

Set a key's time to live in seconds

expireat(key, dueDate)

Set the expiration for a key as a UNIX timestamp

keys(regex)

Find all keys matching the given pattern

move(key, db)

Move a key to another database

object(subcommend /* ... */)

Inspect the internals of an object

persist(key)

Remove the expiration from a key

randomkey()

Return a random key from the keyspace

rename(oldKey, newKey)

Rename a key

renamenx(oldKey, newKey)

Rename a key, only if the new key does not exist

sort()

Sort the elements in a list, set or sorted set

type(key)

Determine the type stored at key

ttl(key)

Get the time to live for a key

append(key, value)

Append a value to a key

decr(key)

Decrement the integer value of a key by one

decrby(key, value)

Decrement the integer value of a key by the given number

get(key)

Get the value of a key

getbit(key)

Returns the bit value at offset in the string value stored at key

getrange(key, start, end)

Get a substring of the string stored at a key

getset(key, value)

Set the string value of a key and return its old value

incr(key)

Increment the integer value of a key by one

incrby(key, value)

Increment the integer value of a key by the given number

mget(key /* ... */)

Get the values of all the given keys

mset(keys /* ... /, values / ... */)

Set multiple keys to multiple values

msetnx(keys /* ... /, values / ... */)

Set multiple keys to multiple values, only if none of the keys exist

set(key, value, ttl)

Set the string value of a key

setbit(key, offset, value)

Sets or clears the bit at offset in the string value stored at key

setex(key, seconds, value)

Set the value and expiration of a key

setnx(key, value, ttl)

Set the value of a key, only if the key does not exist

setrange(key, offset, value)

Overwrite part of a string at key starting at the specified offset

strlen(key)

Get the length of the value stored in a key

hdel(key, field /* ... */)

Delete one or more hash fields

hexists(key, field)

Determine if a hash field exists

hget(key, field)

Get the value of a hash field

hgetall(key)

Get all the fields and values in a hash

hincr(key, field)

Increment the integer value of a hash field by one

hincrby(key, field, value)

Increment the integer value of a hash field by the given number

hdecr(key, field)

Decrement the integer value of a hash field by one

hdecrby(key, field, value)

Decrement the integer value of a hash field by the given number

hkeys(key)

Get all the fields in a hash

hlen(key)

Get the number of fields in a hash

hmget(key, field /* ... */)

Get the values of all the given hash fields

hmset(key, fields /* ... /, values / ... */)

Set multiple hash fields to multiple values

hset(key, field, value)

Set the string value of a hash field

hsetnx(key, field, value /* ... */)

Set the value of a hash field, only if the field does not exist

hvals(key)

Get all the values in a hash

dump(stringify)

Dump the current data store into a string

swap(a, b, depth)

Swap two values

findin(key, value)

Search within the value of a key

Tests

$npm test

(The MIT License)

Copyright (c) 2010 hij1nx http://www.twitter.com/hij1nx

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DBSIZEORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

levelui

A GUI for LevelDB management based on atom-shell.
CSS
723
star
2

lev

The complete REPL & CLI for managing LevelDB instances.
JavaScript
296
star
3

node-chrome

deprecated
JavaScript
281
star
4

cdir

An interactive console.dir() for node.js similar to console.dir() in webkit.
JavaScript
269
star
5

prompt-sync

a synchronous prompt for node.js
JavaScript
217
star
6

ldb

A C++ REPL / CLI for LevelDB
C++
201
star
7

cxx-http

A simple http library in c++ backed by libuv and http-parser.
C++
183
star
8

complete

Does your Node.js command line program have lots of arguments? Add custom tab completion!
JavaScript
165
star
9

codesurgeon

[DEPRECATED] Build a subset or superset of a javascript codebase via reading the AST.
JavaScript
163
star
10

liveswap

zero downtime re-deploys with Node.js
JavaScript
162
star
11

Porter

Resource oriented abstraction layer for JSON-REST
JavaScript
156
star
12

prohub

A Project Perspective for Github
CSS
90
star
13

paramify

Parameterized routes without a big bloated router, e.g. "showtimes/:start/:end" and "files/*"
JavaScript
84
star
14

gmm

Git Module Manager - http://gitmodules.org
Shell
78
star
15

blog

personal blog
HTML
73
star
16

level-replicator

WIP; Eventually consistent log-based multi-master replication for levelDB (@Level)
JavaScript
70
star
17

JUP

A fast JSON to Markup Engine
JavaScript
62
star
18

jsgit-stream

JavaScript
62
star
19

txl

All your html templating needs in under 10 lines of JS.
JavaScript
62
star
20

logmap

Filter json streams/logging output using JSONSelect and format the output
JavaScript
59
star
21

tsd

spins up a server to receive time-series data via tcp streams and then graphs it in the browser via web-sockets
JavaScript
52
star
22

asde

A low level module for destructuring asynchronous values.
JavaScript
50
star
23

pipe

Unix style pipes for nodejs streams `streamA | streamB | streamA`
JavaScript
46
star
24

pxx

a cli tool to store encrypted values in a json file and easily get them out again
JavaScript
40
star
25

net-log

a very fast network-based application logger
JavaScript
39
star
26

bale

A transpiler/module system polyfill for C++
C++
38
star
27

level-users

Store and get users, salt their passwords, persist them to disk, etc.
JavaScript
38
star
28

node-chat

This is very simple code that can be used to demonstrate the caveats and design issues associated with building real-time chat server that uses socket.io.
JavaScript
35
star
29

vines

[not actively maintained] Vines implements the gossip protocol as well as quorum-based voting machinery to facilitate cooperative decision making in distributed systems.
JavaScript
34
star
30

cxx-eventemitter

A minimalist event emitter for C++
C++
33
star
31

debug

A small debugging library for C++
C++
31
star
32

levelweb

LevelDB over http or https.
JavaScript
29
star
33

d

An git based, infrastructure-agnostic deploy tool for node.js
JavaScript
29
star
34

peerdrop

a cross-platform "airdrop" made as a demo for offline camp
JavaScript
27
star
35

route

A simple http router in c++ that can be used with nodeuv-http
C++
27
star
36

level-2pc

A two-phase-commit protocol for leveldb.
JavaScript
26
star
37

cxx-tap

Test Anything Protocol (TAP) Producer for C++
C++
25
star
38

dotfiles

Personal configuration files for unix-like environments.
Vim Script
23
star
39

packvis

package visualizer for the commandline
JavaScript
23
star
40

yl

A tiny flow control module that destructures.
JavaScript
22
star
41

telenode

Multi-vendor cellular network services for node.js
JavaScript
21
star
42

through-cache

a through stream that caches
JavaScript
20
star
43

level-sql

sql for nosql [a work in progress, contributors welcome!]
JavaScript
19
star
44

literate-router

markdown powered routing
JavaScript
17
star
45

cxx-fs

Provides a nodejs-like experience for file I/O in C++ using c++1y and libuv.
C++
17
star
46

level-subtree

build and maintain a tree from the sublevels in a leveldb instance
JavaScript
17
star
47

peerchan

Fully decentralized p2p IRC for your terminal
JavaScript
15
star
48

twitter

A feedless twitter client; broadcast, reply, stay productive. Read a book in your spare time.
JavaScript
15
star
49

to-ml

[deprecated] A tiny module to generate markup
JavaScript
14
star
50

pngify

Text ⇢ PNG ⇢ Text ┈ Pure JS. No dependencies.
JavaScript
13
star
51

cpp-stacktrace

Quick and simple stacktraces for C++
C++
12
star
52

eventemitter

Rust event emitter
Rust
12
star
53

pkp

Public Key Pen! (code from my Nodeconf.eu talk)
JavaScript
12
star
54

redirector

A simple redirect server / URL shortener in C++ backed by nodeuv-http (libuv and http_parser) and leveldb.
C++
12
star
55

forest

Javascript Implementations of SplayTrees, Fusion Trees, BTrees, etc.
JavaScript
11
star
56

node-admin

DEPRECATED
JavaScript
11
star
57

skipfile

Append data, seek forward and seek backward inside a binary file.
JavaScript
10
star
58

TIL

Today I Learned
10
star
59

MacBox

A fork of MacVM that fixes a bunch of UI issues
Swift
10
star
60

json

Better JSON handling for C++
C
10
star
61

tabulate

fit tabular data to the width of your terminal
JavaScript
10
star
62

timeseries-from-gitlog

Represent the git log as time-series data in JSON
JavaScript
10
star
63

cpp-libasync

general purpose asynchronous control flow helpers on thread-safe data structures
C++
9
star
64

stream-response

Respond with `json`, `html`, `text`, or `redirect`. Extend headers easily.
JavaScript
9
star
65

hashd

Recursively hash files in a specified path, appreciate ignore files and patterns.
JavaScript
8
star
66

through2-join

Produce a stream of intersecting data of two or more delimited json streams
JavaScript
8
star
67

go-indexof

The IndexOf() method returns the first index at which a given element can be found in the slice, or -1 if it is not present.
Go
7
star
68

go-tabulate

Column-like layout (padded to fit) for arrays of strings.
Go
7
star
69

ntail

tolerant tailing for your new line delimited json output
JavaScript
7
star
70

node-nosuchmethod

Object.create with a handler for methods that do not exist.
JavaScript
7
star
71

level-key

The easiest way to work with sublevels through multilevel.
JavaScript
7
star
72

subclass

A safe way to extend native types in Node.js and in modern browsers
JavaScript
7
star
73

dtn-website

dtnconf
HTML
7
star
74

level-mget

get multiple values from leveldb
JavaScript
7
star
75

netpeek

this is stupid, dont use it, its just an experiment.
JavaScript
7
star
76

pks

Public Key Server; an invite-only-approach with built in master-master replication.
JavaScript
6
star
77

wc-through

unix wc core util as a through stream, counts into an object
JavaScript
6
star
78

cp-mux

copy files over a multiplexed stream
JavaScript
6
star
79

postmortem

A searchable, issue-only repo for post-mortems (Idea / Template).
6
star
80

admin-template

DEPRECATED
JavaScript
5
star
81

date-at

easily create relative dates. ie: date('+1day')
JavaScript
5
star
82

go-termsize

Get the current size (width and height) of the terminal (nothing more!)
Go
5
star
83

qs

A minimalist dom library
JavaScript
4
star
84

test-env

Conditional output based on an environment variable
JavaScript
3
star
85

platform-module

boilerplate for creating a cross-platform module
JavaScript
3
star
86

getprops

Object.getPropertyDescriptor and Object.getPropertyNames
JavaScript
3
star
87

uvxx

A fork of node.native
C
2
star
88

stream-body

parse a stream correctly (according to the content-type) using raw-body
JavaScript
2
star
89

leveldb

leveldb
C++
2
star
90

electron-issue-17316-poc

Demonstrates issue with missing APIs when contextIsolation is set to true
JavaScript
2
star
91

raylib

C
1
star
92

esauto

Automatic type deduction for javascript
JavaScript
1
star
93

seq-lex

Creates or increments the value of a lexicographically sortable string. useful for creating sequential keys in leveldb
JavaScript
1
star
94

streamordie

A Javascript based band (recorded in front of a async audience)
1
star