Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
Redis etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Redis etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

17 Ekim 2017 Salı

Redis 3.0 msi dosyasını windowsa yüklerken servis yüklenemedi hatası

İndirdiğim dosya Redis-x64-3.2.100.msi yüklerken aşağıdaki servisin yüklenmesi sırasında sürekli yeterli yetkin yok hatasını aldım. En temizinde command prompt ekranını administrator yetkisiyle sağ tuşla açtıktan sonra Redis-x64-3.2.100.msi dosyasını çalıştırdım ve bingo

23 Şubat 2015 Pazartesi

Dikkat etmeniz gereken esas noktalar:

En başta istemci bacağında nasıl bir js dosyası çalışacak:
$(document).ready(function () {

// connect to the socket server
    var socket = io.connect();

// if we get an "info" emit from the socket server then console.log the data we recive
    socket.on('info', function (data) {
        console.log("info client tarafı");
        console.log(data);
    });
});

app.js içindeki kritik nokta:
/* SESSION Ayarları */
var session = require('express-session');
var RedisStore = require('connect-redis')(session); // Redis'te tutacağız
var sessionMiddleware = session({
    resave: true,
    saveUninitialized: true,
    store: new RedisStore({host: '127.0.0.1', port: 6379}),
    key: 'session_id_tutan_anahtar_kelimemiz',
    secret: 'sir_dolu_sozcugumuz_sifrelesin_deyyu'
});
app.use(sessionMiddleware); // express session ayarlarımızı kullansın

bin/www dosyasındaki esas nokta socket oluşturma ve socket içindeki session bilgilerine erişmek:
/* SOCKET */
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var sessionMiddleware = session({ resave: true, saveUninitialized: true, store: new RedisStore({host: '127.0.0.1', port: 6379}), key: 'express.sid', secret: 'secret' });

var arrSessions = [];
var sio = require('socket.io').listen(server);
sio.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

sio.sockets.on('connection', function (socket) {
    console.log("-------------Session ID: "+socket.request.sessionID);
    console.log('A new user connected!');
    arrSessions.push(socket.request.sessionID);
    console.log(arrSessions);
    socket.emit('info', { msg: 'The world is round, there is no up or down.' });
});

Ekran Çıktıları


Tüm Kod

app.js dosyası:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var io = require('socket.io');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());

/* SESSION Ayarları */
var session = require('express-session');
var RedisStore = require('connect-redis')(session); // Redis'te tutacağız
var sessionMiddleware = session({
    resave: true,
    saveUninitialized: true,
    store: new RedisStore({host: '127.0.0.1', port: 6379}),
    key: 'session_id_tutan_anahtar_kelimemiz',
    secret: 'sir_dolu_sozcugumuz_sifrelesin_deyyu'
});
app.use(sessionMiddleware); // express session ayarlarımızı kullansın

/* GET home page. */

app.use('/', express.Router().get('/', function(req, res, next) {
    req.session.deneme = '^cem$';
  res.render('index', { title: 'Express', sid:req.sessionID });
}));

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

module.exports = app;

bin/www dosyasının içeriği
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('redis_pub_sub:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
    var port = parseInt(val, 10);

    if (isNaN(port)) {
        // named pipe
        return val;
    }

    if (port >= 0) {
        // port number
        return port;
    }

    return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }

    var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port

    // handle specific listen errors with friendly messages
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
    debug('Listening on ' + bind);
}


/* SOCKET */
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var sessionMiddleware = session({ resave: true, saveUninitialized: true, store: new RedisStore({host: '127.0.0.1', port: 6379}), key: 'express.sid', secret: 'secret' });

var arrSessions = [];
var sio = require('socket.io').listen(server);
sio.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

sio.sockets.on('connection', function (socket) {
    console.log("-------------Session ID: "+socket.request.sessionID);
    console.log('A new user connected!');
    arrSessions.push(socket.request.sessionID);
    console.log(arrSessions);
    socket.emit('info', { msg: 'The world is round, there is no up or down.' });
});

//for testing, we're just going to send data to the client every second
setInterval(function (socket) {

    /*
     our message we want to send to the client: in this case it's just a random
     number that we generate on the server
     */
    var msg = Math.random();
    sio.emit('info', msg);
    console.log(msg);

}, 10000);

Kaynaklar:
  1. http://danielnill.com/nodejs-tutorial-with-socketio/
  2. https://devcenter.heroku.com/articles/node-websockets
  3. https://github.com/rajaraodv/redispubsub

19 Şubat 2015 Perşembe

Node.js loglarınızı winston-redis ile Redis db de tutma

Kod içinde winston nasıl log seviyesini belirliyor ve redis tarafında nasıl tutuyoru görebilirsiniz:
var winston = require('winston'),
    winstonRedis = require('winston-redis').Redis;

// console'da sadece hepsi tutuluyor olacak çünkü info log seviyesinden sonra diğer tüm log seviyeleri sıralanmış
var transportConsole = new winston.transports.Console({ json: false, timestamp: true, prettyPrint:true, colorize: true, level:'info' }),
// File'da sadece i ve db tutuluyor olacak çünkü i den sonra db log seviyesi sıralanmış
    transportFileDebug = new winston.transports.File({ filename: __dirname + '/debug.log', json: true }),
    transportFileException = new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false }),
    // rediste sadece db tutuluyor olacak çünkü db den sonra bir log seviyesi yok
    transportRedis = new (winstonRedis)({host: '127.0.0.1', port: 6379, level:'db'});


var logger = new (winston.Logger)({
    levels: {
        info: 0,
        warn: 1,
        error: 2,
        verbose: 3,
        i: 4,
        db: 5
    },
    transports: [
        transportConsole,
        transportFileDebug,
        transportRedis
    ],
    exceptionHandlers: [
        transportConsole,
        transportFileException
    ],
    exitOnError: false
});

winston.addColors({
    info: 'green',
    warn: 'cyan',
    error: 'red',
    verbose: 'blue',
    i: 'gray',
    db: 'magenta'
});

logger.i('iiiii foobar level-ed message');
logger.db('dbbbbb foobar level-ed message');
logger.info('infoo foobar level-ed message');
logger.warn('warnnnn foobar level-ed message');
logger.error('errroor foobar level-ed message');

module.exports = logger;

26 Ocak 2015 Pazartesi

Redis, Centos 6.5 & 7

Redis rpm paketleri: http://www.rpmfind.net/linux/rpm2html/search.php?query=redis
2.6 dan yüksek Redis sürümü için: https://robotsystematic.com/redis-higher-than-2-6-in-centos
Ref: http://sharadchhetri.com/2014/10/04/install-redis-server-centos-7-rhel-7/
original: https://troubleshootguru.wordpress.com/2014/11/19/how-to-install-redis-on-a-centos-6-5-centos-7-0-server-2/
Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.

How To Install Redis on Centos 7
# wget -r –no-parent -A ‘epel-release-*.rpm’ http://dl.fedoraproject.org/pub/epel/7/x86_64/e/
# rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-*.rpm

It will create two epel’s repo file inside /etc/yum.repos.d
These are –
1. epel.repo
2.epel-testing.repo
Install Redis with Yum
# yum install redis php-pecl-redis

Enable Redis service to start on boot
# systemctl enable redis-server.service

Disable Redis service from start on boot
# systemctl disable redis-server.service

Start/Stop/Restart Redis
# systemctl start redis-server.service
# systemctl stop redis-server.service
# systemctl restart redis-server.service

Check if Redis is Running
#systemctl is-active redis-server.service

How To Install Redis on Centos 6.5
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
# yum install redis php-pecl-redis
# service redis start
# chkconfig redis on

Now verify its set to start at boot
# chkconfig –list redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

To make sure redis is working, run command “redis-cli ping” from command line. If you get result “PONG”, that shows redis is working.
Now install redis PHP extension, using following command.
# pecl install redis

Now open php.ini ( /usr/local/lib/php.ini on cPanel servers ) file and add the following line to it
extension=redis.so
Now restart Apache to apply the changes to php.ini file.
Now that was pretty simple, but lets say you want to add a second instance to your server on a different port

Add a second instance of Redis
# cp redis.conf redis2.conf && cp /etc/init.d/redis /etc/init.d/redis2

Change
# vim /etc/init.d/redis2
pidfile=”/var/run/redis/redis.pid” to pidfile=”/var/run/redis/redis2.pid”
REDIS_CONFIG=”/etc/redis.conf” to REDIS_CONFIG=”/etc/redis2.conf”

Change
# vim /etc/redis2.conf
port 6379 to port 6380
unixsocket /tmp/redis.sock to unixsocket /tmp/redis2.sock

# service redis2 start

To install a web interface for redis
# cd /downloads/
# git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
# cd phpRedisAdmin/includes
# cp config.sample.inc.php config.inc.php
Make sure the setting are correct
# vim config.inc.php
Lets add the RedisAdmin configuration file to Apache
# vim /etc/httpd/conf.d/redisadmin.conf
Now add the following
#
# Web Interface for RedisAdmin
#

Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from

Alias /redisAdmin /downloads/phpRedisAdmin
Alias /redisadmin /downloads/phpRedisAdmin
View your RedisAdmin Section

http://example.tld/redisadmin

Create a Bash Script to make sure Redis is Running
vim /scripts/redis-check.sh
Add the following for the above installation

#!/bin/bash
PS=$(which ps)
GREP=$(which grep)
WHEN=$(date +”%Y-%m-%d-%H:%M:%S”)
if ! $PS aux | $GREP “redis.conf” | $GREP -v grep 2>&1 > /dev/null; then
/etc/init.d/redis restart
echo ‘Restarted Redis @’ $WHEN
fi
#Check Second instance
if ! $PS aux | $GREP “redis2.conf” | $GREP -v grep 2>&1 > /dev/null; then
/etc/init.d/redis2 restart
echo ‘Restarted Redis2 @’ $WHEN
fi
Make the Script executable

# chmod +x /scripts/redis-check.sh
Add your script to your cron to run every 3 minutes or so

# vim /var/spool/cron/root
*/3 * * * * /bin/bash /script/redis-check.sh >> /var/log/redis-check.log

14 Haziran 2014 Cumartesi

Redis ve ServiceStack İncelemesi

Redis nedir üzerine epeyce okurken, "neden bunları not almıyorum" diye aklımdan geçirdim ve tüm alıntı, çalıntı bilgileri bir de benim anlayış hizama göre sıralamak istedim. Kendime not almaya devam ediyorum :)

Kaynaklar:
Redis Komutları
http://kodluyorum.blogspot.com.tr
http://gurevin.net/2013/04/05/nosql-iliskisel-veritabanlarina-karsimi/
En temiz şekilde veri tiplerini anlamak için



SET

Tek seferde tek değeri anahtarlamak için kullanılıyor
127.0.0.1:6379> set anahtar deger
OK

MSET

Tek seferde birden fazla değeri anahtarlamak için kullanılıyor ve Redis'e defalarca gidip dönmektense işlemi tek seferde hallettiği için doğal olarak daha hızlı oluyor.
127.0.0.1:6379> mset anahtar1 deger1 anahtar2 deger2
OK

ServiceStack ile MSET




MGET


(GetValues ya da GetValuesMap), ile tek çağrıda birden fazla anahtarın değerini alabiliriz.
***On the ServiceStack.Redis client you can use GetValues or GetValuesMap (both string and T apis are available) for fetching multiple values (uses MGET) in a single call. Only existing items are returned, which you can detect with GetValues if you have Id's on your models or GetValuesMap which returns a dictionary of existing keys and their values.

Pipelining de MSET'e benziyor ve sonuçlarını anında görmemize gerek olmayan işlemleri gruplayarak tek seferde gönderiyor ve yine doğal olarak hızlı çalışıyor.
Use Pipelining or Transactions***If for some reason you really only want to check the existence of keys in Redis without fetching them, then you can use a Transaction / or Pipeline (both are pipelined) to queue up multiple operations that gets sent to Redis in 1 socket write. Here's an example of this from RedisStackOverflow demo that queues up 30 operations that gets send and executed in a single batch.

SELECT,

ile Redis üzerinde DB seçebiliriz.Parametre 0..n kadar int değer olur.

FLUSHALL,

ile seçili veritabanı içindeki verileri sileriz. ServiceStack içinde komutları void FlushDb(); ve void FlushAll(); olarak geçiyor.

Veri Tipleri

String olarak Object insert

Basit olarak string tipinde veri kaydı ve çekilmesi.
127.0.0.1:6379> set anahtar deger
OK
127.0.0.1:6379> get anahtar 
"deger"

ServiceStack ile

değer kısmına JSON formatında nesnemizi yazabiliriz. Her TC vatandaşının temel bilgilerinin kaydını düşünelim.

NodeJS Redis ile

var redis = require('redis'),
    c = redis.createClient(),

    a = c.SET("users:1", '{"name":"Fred","age":25}');

LIST

Bir anahtar içine List olarak verileri yazalım:


Sonuç:


SETs



Farklı anahtar için veri girişi:

HASHES