Demo-Redis === Redis é uma base NoSQL baseada em chave-valor de alta performance, vamos evoluir no conhecimento desta com o tutorial que segue ![](https://i.imgur.com/3thRhTr.png) ~~NoSQL = No Sql~~ NoSql = **N**ot **O**nly SQL --- # Simulações com REDIS ## HANDS ON! => https://try.redis.io/ #### Documentação Oficial https://redis.io/commands --- # Tipos de Dados |Tipos| |:-:| |Keys/strings| |Lists| |Sorted sets| |Hashes| --- ## manipulando strings básicas ```bash= > SET server:name "fido" OK > GET server:name "fido" ``` --- ## manipulando valores numericos básicas ```bash= > SET connections 10 OK > INCR connections (integer) 11 > INCR connections (integer) 12 > DEL connections (integer) 1 > INCR connections (integer) 1 ``` --- ## trabalhando com expiração dos dados ```bash= # setando chave valor... > SET resource:batata "Redis Demo" OK # definindo expiração da info em 10seg > EXPIRE resource:batata 10 (integer) 1 # consultando o TimeToLive de nosso dado > TTL resource:batata (integer) 7 # se deixarmos expirar e consultar ttl temos -2 > TTL resource:batata (integer) -2 # se nao setarmos expire e consultar ttl temos como -1 por default > TTL resource:batata (integer) -1 # podemos antes de expirar podemos manipular o valor do expire > EXPIRE resource:batata 10 # uma vez expirado nosso dado é excluído > GET resource:batata (nil) ``` --- ## Manipulando Arrays --- ### inclusões ```bash= # add valor no fim do array > RPUSH devs "Alice" (integer) 1 > RPUSH devs "Bob" (integer) 2 # add valor no inicio do array > LPUSH devs "Sam" (integer) 3 ``` --- ### Consultas em arrays ```bash= # retorna array do 0 ao fim > LRANGE devs 0 -1 1) "Sam" 2) "Alice" 3) "Bob" # retorna array do 0 ao fim > LRANGE devs 0 0 1) "Sam" # retorna do array id 0 ao 1 > LRANGE devs 0 1 1) "Sam" 2) "Alice" # retorna do array id 1 ao 2 > LRANGE devs 1 2 1) "Alice" 2) "Bob" # retorna do array id 1 > LRANGE devs 1 1 1) "Alice" # retorna do array id 1 ao fim > LRANGE devs 1 -1 1) "Alice" 2) "Bob" ``` --- # Tratando Filas... ```bash= # conta elementos de nosso array > LLEN devs (integer) 3 # captura PRIMEIRO valor do array e remove da lista > LPOP devs "Sam" # captura ÚLTIMO valor do array e remove da lista > RPOP devs "Bob" # conta elementos de nosso array > LLEN devs (integer) 1 # retorna do array id 0 ao fim > LRANGE devs 0 -1 1) "Alice" ``` --- ## Similar a manipulação de lista, mas cada valor só pode aparece 1 vez ```bash= # add valor da var > SADD superpowers "flight" (integer) 1 # add valor da var > SADD superpowers "x-ray vision" (integer) 1 # add valor da var > SADD superpowers "reflexes" (integer) 1 # remove valor da var > SREM superpowers "reflexes" 1 # check if exists value on var > SISMEMBER superpowers "flight" (integer) 1 # check if exists value on var > SISMEMBER superpowers "reflexes" (integer) 0 # list var itens > SMEMBERS superpowers 1) "x-ray vision" 2) "flight" # add valor da var > SADD birdpowers "pecking" (integer) 1 # add valor da var > SADD birdpowers "flight" (integer) 1 # union 2 vars > SUNION superpowers birdpowers 1) "pecking" 2) "flight" 3) "x-ray vision" ``` --- ## trabalhando com listagems com Auto-Ordenação ```bash= # Add values > ZADD hackers 1940 "Alan Kay" (integer) 1 > ZADD hackers 1906 "Grace Hopper" (integer) 1 > ZADD hackers 1953 "Richard Stallman" (integer) 1 > ZADD hackers 1965 "Yukihiro Matsumoto" (integer) 1 > ZADD hackers 1916 "Claude Shannon" (integer) 1 > ZADD hackers 1969 "Linus Torvalds" (integer) 1 > ZADD hackers 1957 "Sophie Wilson" (integer) 1 > ZADD hackers 1912 "Alan Turing" (integer) 1 # redis classifica estes automaticamente > ZRANGE hackers 0 -1 1) "Grace Hopper" 2) "Alan Turing" 3) "Claude Shannon" 4) "Alan Kay" 5) "Richard Stallman" 6) "Sophie Wilson" 7) "Yukihiro Matsumoto" 8) "Linus Torvalds" # retorna intervalo de dados > ZRANGE hackers 2 4 1) "Claude Shannon" 2) "Alan Kay" 3) "Richard Stallman" ``` --- # Dados tipo Hashes ```bash= # populando hash > HSET user:1000 name "John Smith" (integer) 1 # populando hash > HSET user:1000 email "john.smith@example.com" (integer) 1 # populando hash > HSET user:1000 password "s3cret" (integer) 1 # retornando dados de uma hash > HGETALL user:1000 1) "name" 2) "John Smith" 3) "email" 4) "john.smith@example.com" 5) "password" 6) "s3cret" # populando multiplos valores para uma hash > HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com" OK # retornando dado específico de uma hash > HGET user:1001 name "Mary Jones" ``` --- ## Trabalhando com Valor numerico em Hashes ```bash= # set valor > HSET user:1000 visits 10 (integer) 1 # incrementa em 1 valor > HINCRBY user:1000 visits 1 (integer) 11 # incrementa em 10 valor > HINCRBY user:1000 visits 10 (integer) 21 # Deleta visits do hash > HDEL user:1000 visits (integer) 1 # cria e incrementa visits no hash > HINCRBY user:1000 visits 1 (integer) 1 ``` --- ## Comandos adicionais para manipulação de hash ```bash= # Captura todos os parametros de um hash > HGETALL user:1000 1) "name" 2) "John Smith" 3) "email" 4) "john.smith@example.com" 5) "password" 6) "s3cret" 7) "visits" 8) "3" # retorna valores sem rotulo > HVALS user:1000 1) "John Smith" 2) "john.smith@example.com" 3) "s3cret" 4) "3.2" # captura o comprimento de um hash > HLEN user:1000 4 # Valida se existe > HEXISTS user:1000 visits (integer) 1 # incrementa valor em float > HINCRBYFLOAT user:1000 visits 0.1 3.1 > HINCRBYFLOAT user:1000 visits 0.1 3.2 # retorna muliplos itens de um hash > HMGET user:1000 visits name 1) "3.2" 2) "John Smith" # seta valor somente se não existir > HSETNX myhash field "Hello" (integer) 1 > HSETNX myhash field "World" (integer) 0 > HGET myhash field "Hello" # multiple set > HMSET myhash f1 HelloWorld f2 99 f3 -256 "OK" # strlen > HSTRLEN myhash f1 (integer) 10 # strlen > HSTRLEN myhash f2 (integer) 2 # strlen > HSTRLEN myhash f3 (integer) 4 ``` HSCAN key cursor [MATCH pattern] [COUNT count] Incrementally iterate hash fields and associated values ```bash= > SADD hashkeys "myhash" "myhash1" "myhash2" (integer) 3 > sscan hashkeys 0 match my* 1) "0" 2) 1) "myhash1" 2) "myhash2" 3) "myhash" > sscan hashkeys 0 match my*2 1) "0" 2) 1) "myhash2" > sscan hashkeys 0 match *1 1) "0" 2) 1) "myhash1" > sscan hashkeys 0 match z 1) "0" 2) (empty list or set) ``` --- # Benchmark de servidores REDIS ```bash= # Zera Redis redis-cli flushall redis-benchmark -t set -r 100000 -n 1000000 redis-benchmark -n 100000 # teste realizado em vm playWithDocker root@7e43aace2baf:/data# redis-benchmark -t set,get,lpush -n 100000 -q SET: 57240.98 requests per second GET: 61957.87 requests per second LPUSH: 61500.61 requests per second ``` --- # E no PHP? :sunglasses: `apt install php5-redis` https://github.com/phpredis/phpredis ![](https://i.imgur.com/6VBM7nX.png) --- # E no Docker? ```bash= # Redis-Alpine -> 10 MB $ docker run --name redis -p6379:6379 -d redis:5.0.5-alpine ``` ```dockerfile= redis: image: 'redis:4-alpine' command: redis-server --requirepass yourpassword ports: - '6379:6379' ``` --- ### extras => https://redis.io/ # Tarefa de Casa > https://try.redis.io/ ###### tags: `Estudos`
{"metaMigratedAt":"2023-06-14T23:20:10.171Z","metaMigratedFrom":"Content","title":"Demo-Redis","breaks":true,"contributors":"[{\"id\":\"6092e201-5e2d-4e7f-ade9-2e08afebdcc7\",\"add\":7219,\"del\":0}]"}
    158 views