= Redis =

https://redis.io/

Key-value in-memory data store used as a 
 * database 
 * cache
 * streaming engine 
 * message broker

== Install Redis 2.6.12 on Slackware64 14 ==

SlackBuilds Redis page [[http://slackbuilds.org/repository/14.0/system/redis/]].

Build SlackBuilds for Redis 2.6.12:
{{{#!highlight sh
cd /tmp
wget http://slackbuilds.org/slackbuilds/14.0/system/redis.tar.gz
tar xvzf redis.tar.gz
cd redis
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
su
./redis.SlackBuild
installpkg /tmp/redis-2.6.12-x86_64-1_SBo.tgz
}}}

Built package for Slackware64 14: [[attachment:redis-2.6.12-x86_64-1_SBo.tgz]]

== Install Redis 2.6.14 on Slackware 14 ==

SlackBuild Redis page [[http://slackbuilds.org/repository/14.0/system/redis/]].

Build SlackBuilds for Redis 2.6.14:
{{{#!highlight sh
su
cd /tmp
wget http://slackbuilds.org/slackbuilds/14.0/system/redis.tar.gz
tar xvzf redis.tar.gz
cd redis
wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz
./redis.SlackBuild
installpkg  /tmp/redis-2.6.14-i486-1_SBo.tgz
}}}

Built package for Slackware 14: [[attachment:redis-2.6.14-i486-1_SBo.tgz]]

== Start Redis service on Slackware ==

Run the following commands:
{{{#!highlight sh
chmod 755 /etc/rc.d/rc.redis # start on boot
/etc/rc.d/rc.redis start
}}}

Manual start/stop:
{{{#!highlight sh
sh /etc/rc.d/rc.redis start
sh /etc/rc.d/rc.redis stop  
}}}

It listens in port '''6379''' and stores it's data on '''/var/lib/redis/''', as configured in '''/etc/redis.conf'''.

== Tutorial The Little Redis Book ==

Tutorial in [[http://openmymind.net/redis.pdf]].

== Connect to a Redis server ==
To connect to a Redis server, the '''redis-cli''' command may be used.

Usage examples:
 * redis-cli -h <hostname> -p <port> -a <passwd>
 * redis-cli -h 127.0.0.1 -p 6379 -a secretPass

== Setting and getting keys ==
The basic anatomy of a command is:
 * <command> <key> <value>

To show all keys use '''keys *'''

To get the type of a key use '''type keyName'''

To set a key named '''unixcommand:bc''' with the value '''{command:'bc' , description:'bc - An arbitrary precision calculator language' , syntax:'bc [ -hlwsqv ] [long-options] [  file ... ]'}''' 
the command would be:
 * set unixcommand:bc "{command:'bc' , description:'bc - An arbitrary precision calculator language' , syntax:'bc [ -hlwsqv ] [long-options] [  file ... ]'}"

To get the key value the command would be:
 * get unixcommand:bc

=== Redis hash key ===
Command prefix '''H'''.

Set an hash key with multiple fields with values:
 * hmset <haskey> <field> <value> <field> <value> <field> <value> (...)
 * hmset test:properties prop1 value1 prop2 value2 prop3 value3 

Gets field values for an hash key:
 * hget <haskey> <field> <field <field> (...)
 * hget test:properties prop1 prop3 

Get all fields and values for an hash key:
 * hgetall <haskey> 
 * hgetall test:properties 

Get fields for an hash key:
 * hkeys <haskey> 
 * hkeys test:properties 

Get field for an hash key:
 * hkeys <haskey> 
 * hkeys test:properties 

Delete field from an hash key:
 * hdel <haskey> field
 * hdel test:properties prop2

=== Redis list ===
Command prefix '''L''' or '''R'''.

Examples:
 * rpush list value
 * rpop list 
 * rpush queueA "{'id':1,'task':'add','values':[1,2,3,4,5,6,7,8]}"
 * rpop list value

 * lpush lx "aaaaa"
 * llen lx
 * lindex lx 0
 * lpush lx "bbbbb"
 * lpush lx "ccccc"
 * llen lx
 * lindex lx 0
 * lindex lx 1
 * lindex lx 2
 * lpop lx
 * lpop lx
 * lpop lx
 * lpop lx

=== Redis sorted set ===
Command prefix '''Z'''. Only allow unique members values on the sorted set.
When a existing member is added, the score is updated.

Examples:
 * zadd sortedSetx 123 "{'key':'hello'}" #add member to the sorted set with score 123
 * zcard sortedSetx #number of members in the sorted set sortedSetx
 * zrangebyscore sortedSetx 100 150 # get members where the score is between 100 and 150
 * zrange sortedSetx 0 0 #get the members between 0 and 1 index
 * zrem sortedSetx  "{'key':'hello'}" #removes the member in the sorted set


== Python client install from pip ==
{{{#!highlight sh
su
easy_install pip # if no pip installed
pip install redis
}}}

== Python client install from source ==
{{{#!highlight sh
su
cd /tmp
wget [[https://pypi.python.org/packages/source/r/redis/redis-2.8.0.tar.gz]]
tar xvzf redis-2.8.0.tar.gz 
cd redis-2.8.0
python setup.py build
python setup.py install
}}}

{{{#!highlight python
python
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# r = redis.Redis(host='localhost', port=6379, db=0)
r.rpush('queueA','test')
r.rpush('queueA','test2')
r.rpop('queueA')
r.rpop('queueA')
r.rpush('queueA', {'key':1234}  )
x=r.pop('queueA')
#convert string to dictionary
import ast
dictx=ast.literal_eval(x)
dictx
dictx['key']
}}}

== Install on FreeBSD 10.3 ==
{{{#!highlight sh
pkg install redis #freebsd
add redis_enable="YES" to /etc/rc.conf
/usr/local/etc/rc.d/redis start

/usr/local/etc/redis.conf
requirepass 12345678
}}}

== Install redis in debian ==
{{{#!highlight sh
sudo apt install redis
redis-cli
}}}