Redis

Redis: Giới thiệu các khái niệm cơ bản và cài đặt trên OSX

Redis được viết bằng C, là một phần mềm mã nguồn mở được dùng để lưu trữ một cách tạm thời trên bộ nhớ (hay còn gọi là cache data) dưới dạng key-value và giúp truy xuất dữ liệu một cách nhanh chóng. Redis

Do tốc độ truy xuất dữ liệu vượt trội so với các cơ sở dữ liệu thông thường như MySQL nên redis được sử dụng rất nhiều trong kỹ thuật Caching.

Redis có 3 đặc thù chính mà đặt nó ngoài sự cạnh tranh với cái khác:

  • Redis giữ toàn bộ cơ sở dữ liệu của nó trong bộ nhớ.
  • Redis có một bộ kiểu dữ liệu dồi dào khi so tới nhiều lưu trữ dữ liệu key-value.
  • Redis có thể backup dữ liệu tới bất kỳ số lượng đĩa phụ.

Lợi Thế Của Redis

  • Nhanh một cách khác thường: Redis rất nhanh có thể thực hiện khoảng 110000 set dữ liệu trên giây, và 81000 get dữ liệu/giây.
  • Hổ trợ giàu các kiểu dữ liệu: redis hổ trợ hầu hết các kiểu dữ liệu mà hầu hét các developer đã biết, giống như: list, set, sorted set, hashes. Cho nên dể dàng giải quyết các vấn đề đa dạng bởi vì chúng ta biết vấn đề nào có thể được xử lý tốt hơn với kiểu dữ liệu đó.
  • Nhiều công cụ tiện ích: Redis là một công cụ đa tiện ích và có thể được sử dụng trong một số trường hợp sử dụng như bộ nhớ đệm, hàng đợi tin nhắn. Bất kỳ dữ liệu có đời sống ngắn trong ứng dụng của bạn như session, đếm số lượng khám phá web page…
  • Các hoạt động là nguyên tử: Tất cả hoạt động của redis là nguyên tử, tức là một đơn vị nhỏ nhất như nguyên tử, do vậy nó bảo đảm rằng nếu có 2 khách hàng đồng thời truy cập server Redis thì sẽ nhận giá trị cập nhật.

Install redis

brew install redis

install log:

--------------------------------------------------

Nguyens-MacBook-Pro:myevn vinh.nguyenquang$ brew install redis
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core, caskroom/cask).
==> New Formulae
autopep8        git-sizer       libbi           lzfse           octomap
caffe           go-bindata      libomp          maxwell         python@2
docker-squash   hss             libserialport   mill            skaffold
fastme          icemon          llvm@5          neomutt         stellar-core
==> Updated Formulae
abcde                                    libhttpseverywhere
abcmidi                                  libical
agedu                                    liblwgeom
ammonite-repl                            libmspub
angular-cli                              libphonenumber
ansible                                  libpq
ansible-cmdb                             libpqxx
ansible-lint                             librasterlite
ansifilter                               librealsense
apache-spark                             librsync
app-engine-java                          libsass
app-engine-python                        libspatialite
arangodb                                 libtensorflow
artifactory                              libtrace
asciinema                                libu2f-host
atdtool                                  libunistring
augustus                                 libvirt
automake                                 libwebsockets
aws-sdk-cpp                              linkerd
awscli                                   llvm
azure-cli                                logrotate
bandcamp-dl                              lorem
bartycrouch                              lynis
bazel                                    macvim
bedops                                   magic-wormhole
bench                                    mame
biogeme                                  mapnik
bit                                      mapserver
bitcoin                                  masscan
bmake                                    maven
boost-python3                            memcached
brotli                                   mercurial
buku                                     meson
burp                                     mikutter
caf                                      mitmproxy
cake                                     mkdocs
calabash                                 mmseqs2
cassandra                                molecule
castxml                                  mongo-c-driver
cayley                                   mongo-cxx-driver
cc65                                     mps-youtube
certbot                                  mrboom
certigo                                  mutt
cfitsio                                  mypy
cgal                                     nano
chamber                                  nanopb-generator
charm-tools                              nco
chromedriver                             nghttp2
chronograf                               nicotine-plus
ckan                                     nim
clamav                                   nnn
clojure                                  node
cockatrice                               node-build
conan                                    node@4
conjure-up                               node@6
consul-backinator                        node@8
container-diff                           nodebrew
corebird                                 nq
creduce                                  nspr
crystal-icr                              numpy
crystal-lang                             ocrmypdf
csvkit                                   ode
csvtomd                                  odpi
ctop                                     offlineimap
cvs2svn                                  onetime
dateutils                                opencoarrays
dcos-cli                                 opencv
ddgr                                     opencv@2
diffoscope                               openimageio
diffuse                                  openrtsp
distcc                                   openvpn
django-completion                        osm2pgsql
dnscrypt-proxy                           p11-kit
dnscrypt-wrapper                         paket
docfx                                    pandoc
docker-machine                           pandoc-citeproc
docker-machine-completion                passenger
doctl                                    pastebinit
dovecot                                  percona-toolkit
dropbear                                 pgcli
dub                                      pgformatter
efl                                      pgroonga
elektra                                  picard-tools
elixir                                   pipenv
emacs-clang-complete-async               plank
eralchemy                                pmd
etcd                                     poco
exempi                                   ponysay
faas-cli                                 postgis
fades                                    postgresql
fb-client                                postgresql@9.4
fcl                                      postgresql@9.5
fdroidserver                             postgresql@9.6
feh                                      pre-commit
fetch-crl                                presto
firebase-cli                             proj
flow                                     prometheus
fluent-bit                               protobuf
fluid-synth                              py2cairo
flyway                                   py3cairo
fn                                       pybind11
folly                                    pyenv
fonttools                                pyqt
fuego                                    python
fuse-emulator                            pytouhou
g3log                                    qpdf
gawk                                     qpid-proton
gdal                                     qscintilla2
get-flash-videos                         quicktype
geth                                     rabbitmq
getmail                                  radare2
gifski                                   re2
gimme                                    redex
git-annex                                restic
git-cola                                 rocksdb
git-lfs                                  rom-tools
git-recent                               root
gitbucket                                roswell
glade                                    rtags
glib-openssl                             rtv
gmt                                      rust
gnatsd                                   s-nail
gnome-autoar                             sassc
gnome-recipes                            saxon
gnu-cobol                                sbcl
go-jira                                  sbtenv
gobject-introspection                    scamper
gom                                      scipy
gomplate                                 sdl2
googler                                  sdl2_image
gosu                                     selenium-server-standalone
gradle                                   shfmt
grafana                                  shyaml
grails                                   simgrid
graphene                                 sip
grc                                      skafos
groovy                                   snakemake
grpc                                     snapcraft
grv                                      source-to-image
gsoap                                    sparkey
gst-python                               spatialite-gui
gtk+                                     spatialite-tools
gutenberg                                spigot
gwyddion                                 spin
gxml                                     sqlmap
hana                                     sstp-client
harfbuzz                                 streamlink
hayai                                    subversion
help2man                                 subversion@1.8
heroku                                   svgo
httpd                                    svtplay-dl
httpie                                   swift-protobuf
hugo                                     swiftformat
icoutils                                 syncthing
igv                                      szip
imagemagick                              terminator
imagemagick@6                            terragrunt
influxdb                                 thefuck
iperf3                                   tile38
ipython                                  tippecanoe
ipython@5                                titlecase
isc-dhcp                                 todoman
iso-codes                                tomcat
jbake                                    tor
jenkins                                  traefik
jenkins-job-builder                      twarc
jhipster                                 twine-pypi
jmxtrans                                 twoping
jnettop                                  twtxt
joplin                                   urh
jpeg                                     uwsgi
json-fortran                             vapoursynth
juju                                     vault
juju-wait                                vdirsyncer
jupyter                                  viewvc
just                                     vim
kedge                                    vim@7.4
keepassc                                 vips
kerl                                     vnstat
khal                                     webpack
khard                                    whatmp3
kobalt                                   wireguard-tools
kompose                                  woboq_codebrowser
kontena                                  xdot
kotlin                                   xerces-c
krakend                                  xml-tooling-c
kubernetes-helm                          xonsh
ldc                                      yaml-cpp
lean-cli                                 yarn
lensfun                                  yosys
libdill                                  you-get
libepoxy                                 youtube-dl
libgaiagraphics                          zig
libgeotiff                               zim
libgosu                                  zint
==> Renamed Formulae
php72 -> php
==> Deleted Formulae
llvm@3.8                                 python3

==> Downloading https://homebrew.bintray.com/bottles/redis-4.0.8.high_sierra.bot
######################################################################## 100.0%
==> Pouring redis-4.0.8.high_sierra.bottle.tar.gz
==> Caveats
To have launchd start redis now and restart at login:
  brew services start redis
Or, if you don't want/need a background service you can just run:
  redis-server /usr/local/etc/redis.conf
==> Summary
🍺  /usr/local/Cellar/redis/4.0.8: 13 files, 2.8MB
Nguyens-MacBook-Pro:myevn vinh.nguyenquang$ 

Chú ý 2 câu cuối cùng của install log:

To have launchd start redis now and restart at login:
  brew services start redis
Or, if you don't want/need a background service you can just run:
  redis-server /usr/local/etc/redis.conf

Để start redis, thực hiện lệnh:

redis-server /usr/local/etc/redis.conf

Kiểm tra phiên bản redis đang cài trên máy:

brew info redis

Output:

Last login: Sun Mar 11 14:20:05 on ttys004
Nguyens-MacBook-Pro:LaunchAgents vinh.nguyenquang$ brew info redis
redis: stable 4.0.8 (bottled), HEAD
Persistent key-value database, with built-in net interface
https://redis.io/
/usr/local/Cellar/redis/4.0.8 (13 files, 2.8MB) *
  Poured from bottle on 2018-03-11 at 14:08:20
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/redis.rb
==> Options
--with-jemalloc
	Select jemalloc as memory allocator when building Redis
--HEAD
	Install HEAD version
==> Caveats
To have launchd start redis now and restart at login:
  brew services start redis
Or, if you don't want/need a background service you can just run:
  redis-server /usr/local/etc/redis.conf
Nguyens-MacBook-Pro:LaunchAgents vinh.nguyenquang$ 

Kiểm tra redis đang hoạt động:

redis-cli ping

Ouput:

Nguyens-MacBook-Pro:myevn vinh.nguyenquang$ redis-cli ping
PONG

Kết quả trả về: PONG –> như vậy là service đang chạy

Để stop redis

/usr/local/etc/redis.conf

Uninstall redis:

brew uninstall redis
rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Sử dụng brew để check/bật/tắt redis:

brew services list
brew services start redis
brew services stop redis
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew services list
==> Tapping homebrew/services
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 14 (delta 0), reused 10 (delta 0), pack-reused 0
Unpacking objects: 100% (14/14), done.
Tapped 0 formulae (43 files, 55.4KB)
Name      Status  User Plist
redis     stopped      
sonarqube stopped      
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew start redis
Error: Unknown command: start
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew services list
Name      Status  User             Plist
redis     started vinh.nguyenquang /Users/vinh.nguyenquang/Library/LaunchAgents/homebrew.mxcl.redis.plist
sonarqube stopped                  
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew services stop redis
Stopping `redis`... (might take a while)
==> Successfully stopped `redis` (label: homebrew.mxcl.redis)
Nguyens-MacBook-Pro:etc vinh.nguyenquang$ brew services list
Name      Status  User Plist
redis     stopped      
sonarqube stopped      
Nguyens-MacBook-Pro:etc vinh.nguyenquang$