Macで日本語入力ができなくなったけど解決した話
Macで作業中、突然日本語入力ができなくなってしまうことがあり、一応の解決策が見つかったのでメモ。
どういうこと?
Macでアプリを切り替えて作業をしていると、突然日本語入力が出来なくなる。 ちなみに、Google日本語入力を使っています。
- 「英数」「かな」キーを押してみても反応なし。(もしくは、一瞬右上の言語メニューが切り替わるけど、すぐに戻ってしまう。)
- 右上の言語メニューから「ひらがな」を選択しても変化なし。
コード書いてる時ならそこまで困らないが、チャットなどしてる時だと、もう大変。 「nihonngoutenakunarimasita」みたいになってしまう。。
どうやって解決したの?
普段、クリップボード拡張で、Clipyを使っています。 思い返してみると、日本語が入力できなくなった辺りからClipyが反応しなくなってしまった。
これはもしやと思って、Clipyを落としてみた。
/Applications/Utilities/アクティビティモニタ を開き、「Clipy」を探し、"×"アイコンをクリック。
Cipyが落ちたので、日本語入力をやってみると・・・できた!!!!
他のアプリが影響したりしてることもあるけど、今回はこれでうまくいきました。 よかったよかった。。。
Ansibleを使おう
TOC
- 構成管理ツールとは?
- Ansibleとは?
構成管理ツールとは?
サーバーを作成した時など、マニュアル的に実行している処理、手順があると思います。
例えば・・・ - ユーザーを作って - apache入れて - sshの設定して - ディレクトリ作って などなど。
マニュアルを見ながら進めていけば、1度や2度なら問題は起こらないかもしれませんが、それが10回20回・・・となった場合、毎回同じような結果になるといえるでしょうか? (マニュアルをブラッシュアップしろよというツッコミはここでは無視)
そういうときは構成管理ツールを使いましょう。 構成管理ツールを使うと以下のことができるようになります。
- セットアップの自動化(構成管理)
- デプロイメント
- これらの手順を共有できる などなど。
面倒な作業を自動化できるだけでなく、手順をコード化することができます。 しかもそれをチーム内で共有すれば、誰が何度やっても同じ結果が返ってくるようになります。
Ansibleとは?
構成管理ツールには代表的な物がいくつかあります。
- Puppet
- Chef
- Ansible
- Rex
この中で最近人気のある Ansible を使っています。
Ansibleには主に以下の特徴があります。 - エージェントレス - 豊富なモジュール - 冪等性 - シンプルな記述
エージェントレス
- サーバー側に特別なインストール不要
- ローカルにpython2.4+,サーバーにpython2.6+がインストールサれていれば動く
サーバーに勝手にいろいろインストールできないという場合でも、pythonさえあれば動作します。
豊富なモジュール
以下に一例を挙げます。 - yum - git - ファイルのダウンロード - slackに通知を送る などなど。 All Modules — Ansible Documentation
標準でできることが多いので、YAML形式で設定を書いていけばいろいろな機能を使うことができます。
冪等性
Ansibleの特徴に冪等性(べきとうせい)があります。 冪等性とは「ある操作を何度行っても、毎度同じ結果が返ってくる」ということです。
すでに実行したことがある処理を再度実行した場合でも、実行し直すのではなく、状態を見て、適宜スキップしてくれます。
シンプルな記述
Ansibleの設定ファイルは一般的なYAML形式で書かれており、非常にシンプルです。
- name: apacheのインストール apt: pkg=apache2 state=latest - name: MySQLのインストール apt: pkg=mysql-server-5.6 state=present
このように非常にシンプル。
Ansibleを使えば、サーバーの構築はもちろん、Macの環境構築、CMSのセットアップなど多くのことを自動化出来ます。
今回はざっくりとした概要だけで、具体的な使い方は別の記事で紹介したいと思います。
Acrobat proでメニューが消えてしまった!!
PDFを見ようと思い、Adode Acrobat proを起動した時、誤ってメニューバーを消してしまいました。。。 一瞬あせりましたが、どうにか解決出来たので、備忘録としてメモ。
ちなみにAcrobat proのバージョンは2015.017.20053です
メニューバーが消えるってどういうこと?
PDFを開いたとき、ツールパネルのウィンドウなどが開いてて、PDFの表示領域が極端に狭くなってしまっていた。。
「こういうのはたいていメニューバーの表示でなんとかなるでショ」と軽い気持ちで、
メニューバー > 表示 > 表示の切り替え
からチェックがついている「ツールパネルウィンドウ」をクリックしてやると、想定通りツールパネルウィンドウが消えました。
ここでやめておけばよかったのに・・・。
「おや?メニューバーにもチェックが入ってるぞ・・・」
見てみると「メニューバー」にもチェックが入っていました。
「ここをクリックすると、印刷アイコンとかも消えるかも!」と、クリックしてみると・・・、なんということでしょう!! 一番上のアップルマークなどのメニューバーが消えてしまいました!!
もう一度メニューバーの「表示」から戻そうと思ったけど、メニューバー(があったところ)をクリックしてもFinderのメニューが出てきてしまいます。。。
どうしよう。。。
ツールを起動してみよう。
上部にある、「ホーム」「ツール」などのメニューから「ツール」を選択し、なんでもいいので選択してみます。
すると、今まで消えていたメニューバーが出てきたではありませんか!!
ちなみに、「ホーム」から別のPDFを開いたりしてもメニューバーは復活します。
後先考えずにこういうことをすると痛い目を見るな、と言う教訓でした。。。
Hubot起動時に出るエラーをどうにかしたい!!
Hubotを起動する際に以下のエラーがでてる。
$ bin/hubot ⏎ [Thu Sep 22 2016 05:01:57 GMT+0900 (JST)] ERROR Error: listen EADDRINUSE 0.0.0 .0:8080 at Object.exports._errnoException (util.js:1026:11) at exports._exceptionWithHostPort (util.js:1049:20) at Server._listen2 (net.js:1253:14) at listen (net.js:1289:10) at net.js:1399:9 at _combinedTickCallback (internal/process/next_tick.js:77:11) at process._tickCallback (internal/process/next_tick.js:98:9) mybot> [Thu Sep 22 2016 05:01:59 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379 [Thu Sep 22 2016 05:01:59 GMT+0900 (JST)] INFO hubot-redis-brain: Data for hub ot brain retrieved from Redis
今のところ、出てても起動には影響しなかったのでほうっておいたが、きになったのでちょっと調べてみた。
nodeのプロセスがすでに動いているらしい
ぐぐったら以下のサイトが見つかった。
ここに書かれていることが全てなのだけど、どうも以前nodeで使われたポートがそのままになっているのが問題らしい。
なので、使っていないプロセスを止めてあげましょう。
# 確認 $ ps aux | grep node root 19383 0.1 0.5 3118512 40724 s011 S+ 7:00PM 0:03.18 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_module s/.bin/hubot --name mybot root 34778 0.1 0.1 3122496 5436 s000 S+ Fri06PM 0:21.10 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modules/.bin/hubot --name mybot root 12361 0.1 0.4 3116116 34604 s013 S+ 5:13PM 0:04.53 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modul$s/.bin/hubot --name mybot node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modules/.bin/hubot --name mybot root 12361 0.1 0.4 3116116 34604 s013 S+ 5:13PM 0:04.53 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modules/.bin/hubot --name mybot root 30141 0.1 0.1 3122360 6536 s001 S+ Fri05PM 0:21.71 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modules/.bin/hubot --name mybot root 21108 0.0 0.0 2441988 656 s017 R+ 5:02AM 0:00.00 grep node root 21071 0.0 1.1 3126560 94284 ?? S 5:01AM 0:02.73 node node_modules/.bin/coffee /Volumes/MacintochHD/Documents/mybot/node_modules/.bin/hubot # nodeのプロセスを殺す $ killall node # 再度確認 $ ps aux | grep node root 21142 0.0 0.0 2432772 528 s017 R+ 5:02AM 0:00.00 grep node # 起動 $ bin/hubot mybot> [Thu Sep 22 2016 05:02:58 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379 [Thu Sep 22 2016 05:02:58 GMT+0900 (JST)] INFO hubot-redis-brain: Data for hubot brain retrieved from Redis
エラーが消えてスッキリしました。
やっぱりエラーが出っぱなしってのは精神衛生上良くないよね。。。。
Homebrewでアプリをアンインストールしたら Error: {app} is not installedが出て怒られた
macでアプリの管理はHomebrewを使っています。
思い立って不要なファイルをアンインストールしようと brew cask uninstall {app}
としたら Error: {app} is not installed
と出てできなかったので、ちょっと調べてみたのでメモ。
まずは手順を
# まずはbrew でインストールしているアプリを確認 $ brew cask list ⏎ adobe-creative-cloud kobito (!) alfred macvim appcleaner magican atom mamp bartender mi bettertouchtool minbox bitbar mplayerx caffeine node (!) ccleaner skype clipmenu slicy divvy sophos-anti-virus-home-edition (!) dropbox sourcetree eclipse-ide sublime-text evernote sublime-text3 (!) filezilla textwrangler firefox the-unarchiver genymotion totalfinder gimp vagrant google-chrome virtualbox google-hangouts visual-studio-code google-japanese-ime vlc hyperswitch vmware-fusion inkscape xampp iterm2 xquartz karabiner yabumi # slicyは使ってないのでアンインストール $ brew cask uninstall slicy Error: slicy is not installed <= どうして・・・
こんな感じでアンインストール出来ない・・・。
わからないときはググってみる
error * is not installed homebrew
アタリでググって見ると結構見つかるけど、今回はこの記事が見つかった。
ここに手動で消す方法が紹介されていたので、やってみる
# /Users/{user}/Applications/~ $ ll slicy.app ll /Users/{user}/Applications/Slicy.app ⏎ lrwxr-xr-x 1 root staff 42B Sep 3 07:11 /Users/{user}/Applications/Slicy.app -> /usr/local/Caskroom/slicy/latest/Slicy.app # 削除 $ rm -f /Users/{user}/Applications/Slicy.app $ rm -rf /usr/local/Caskroom/slicy/latest/Slicy.app # 確認 $ brew cask list
ここまでやってSlicyがなくなっていればOK
どうしてこうなるの?
どうしてこうなるのか気になったので、調べてみた。
これによると、インストールした時と違うバージョンがインストールされていると起こる問題らしい。
この中で、「brew cask uninstall --force
で全てのバージョンを消せるよ」って言っているのでやってみた。
# まずはbrew でインストールしているアプリを確認 $ brew cask list ⏎ adobe-creative-cloud kobito (!) alfred macvim appcleaner magican atom mamp bartender mi bettertouchtool minbox bitbar mplayerx caffeine node (!) ccleaner skype clipmenu slicy divvy sophos-anti-virus-home-edition (!) dropbox sourcetree eclipse-ide sublime-text evernote sublime-text3 (!) filezilla textwrangler firefox the-unarchiver genymotion totalfinder gimp vagrant google-chrome virtualbox google-hangouts visual-studio-code google-japanese-ime vlc hyperswitch vmware-fusion inkscape xampp iterm2 xquartz karabiner yabumi # divvyをアンインストール $ brew cask uninstall --force divvy # 確認 $ brew cask list
これでdivvyがなくなっていればOK。
Homebrew はアプリのインストールが楽だからついつい消し忘れのアプリが増えてしまいがちだけど、定期的に見直してきれいにしましょー
coffee script でエラーが出て全然開発がすすまない!!
最近、Hubotで遊んでいるのですが、Hubotではおもにcoffee scriptを使ってBotを作っています。
ただ、まだcoffee scriptに慣れていないためよく、エラーが出て止まってしまいます。。
/V/M/D/mybot ❯❯❯ bin/hubot mybot> [Thu Sep 15 2016 18:15:16 GMT+0900 (JST)] ERROR Unable to load /Volumes/MacintochHD/Documents/mybot/scripts/redis: SyntaxError: unexpected OUTDENT
エラー箇所がすぐにわかればいいのですが、ターミナルではエラー箇所を教えてくれないので、場合によっては時間がかかってしまう時があります。。
そんなときは coffee scriptの公式へ!
すぐにエラー箇所がわからない場合は、迷わず公式に行きましょ。
上に並んでるなかから「TRY COFFEE SCRIPT」を開きます。
すると、コンソールが開いて、「Javascript で展開したらこうなるよ!」っていうのを教えてくれます。
親切なことにcoffee scriptでエラーがあると、Error on line 2: missing "
みたいにエラー箇所を教えてくれます。
これをうまく使っていけば、Hubotの開発も少しは楽になるかもしれません。
Redisについて dotinstall で勉強しました。
HubotでBotを作る際、Redisを使うけど、「Redisとはなんぞや??」と思い調べたので、メモ。 ほとんど(というか大半)は dotinstall そのままなので、dotinstall見たほうがいいかも。。。
Redis入門: http://dotinstall.com/lessons/basic_redis
redisとは?
特徴
- メモリ上に作成されるDB
- すごく早い!
- メモリ上に作成されるので、容量にはシビア
- 定期的にデータをディスクに書き出す永続化という仕組みを採用
- 公式: Redis.io
KVSとは?
KVS (Key Value Store)
- key と valueをセットで保存するDB
Data Type
Redisにはデータタイプとしていくつか用意されている
- String
- List
- Set
- Sorted Set
- Hash
Data Type
String
- Redisで最も基本的なデータタイプ
- どのようなデータでも保存できる
- 文字列は最大1GBまで扱うことが出来る
- リスト型、セット型、ソート済みセット型、ハッシュ表型で保持される各要素は文字列型である redis 2.0.3 documentation
List
- 順番に並べた複数の要素
- 時系列的なデータ
- 新しい要素をリストの先頭(左側)または末尾(右側)に追加することが
Set
- 順不同の複数の要素。重複を許さない
- 集合の演算ができる
- タグ、ソーシャルグラフなどで、共通のタグを抽出したり、共通の友達を検索したり用いられる。
Sorted Set
- Setの特徴を持ちつつ、個々の要素にスコア付き
- 追加した要素をスコアに応じて並べ替える
- ランキングなどで用いられる
Hash
- 連想配列
- 値とラベルのセットを複数持つ
Redisを使ってみる
起動と終了
- 起動: `$ redis-server'
- 終了:
Ctrl + C
クライアント(CLI)の起動と終了
- 起動:
$ redis-cli
- 終了:
exit
- 終了:
shutdown
exit
とshutdown
の違いは、shutdown
の方はその時点でのデータをディスクに書き出してくれる
データベースの選択
select #{DBの番号}
- デフォルトで0が選択されている
データの保存
bgsave
保存されたデータ
- redis-serverを立ち上げたディレクトリに
dump.db
という名前で保存され、次回起動時に読み込まれる
確認
# Redisの起動 $ redis-server # 別タブでcliを起動 $ redis-cli # 値をセット 127.0.0.1:6379> set key_1 1 OK # 確認 127.0.0.1:6379> get key_1 "1"
この時点では作業ディレクトリにdump.db
が作成されていないことを確認
# おもむろにCLIを終了 127.0.0.1:6379> exit # CLIは終了したが`dump.db`は作成されていないことを確認 $ ls $ # 再度起動 $ redis-cli # 書きだされてはいないが、メモリ上に値が保存されていることを確認 127.0.0.1:6379> get key_1 "1" # 値を保存 127.0.0.1:6379> bgsave Background saving started
この時点で作業ディレクトリには dump.db
が作成されている
# いったん作成された`dump.db`を削除して、今度はshutdownしてみる 127.0.0.1:6379> shutdown $
作業ディレクトリにdump.db
が作成されていることを確認
また、別タブで起動していたredis−serverも終了していることが確認できる。
String型
# 値をセットする 127.0.0.1:6379> set key value 127.0.0.1:6379> OK # 確認 127.0.0.1:6379> get key "value" # 複数の値をセットする 127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3 127.0.0.1:6379> OK # 確認 127.0.0.1:6379> mget key1 key2 key3 1) "value1" 2) "value2" 3) "value3" # scoreに"120"を追加 127.0.0.1:6379> set score 120 127.0.0.1:6379> OK 127.0.0.1:6379> get score "120" # 1ずつ増減 127.0.0.1:6379> incr score (integer) 121 127.0.0.1:6379> get score "121" 127.0.0.1:6379> decr score (integer) 120 127.0.0.1:6379> get score "120" # 10ずつ増減 127.0.0.1:6379> incrby socre 10 (integer) 130 127.0.0.1:6379> get score "130" 127.0.0.1:6379> decrby score 10 (integer) 120 127.0.0.1:6379> get score "120"
KEY の操作
$ redis-cli # 格納されているKEYを確認。ワイルドカードで一覧を取得できる 127.0.0.1:6379> keys * 1) "score" 2) "key1" 3) "key3" 4) "key" 5) "key2" 6) "key_1" # KEY の存在を確認 127.0.0.1:6379> exists key1 #結果がtrue(存在する)場合、`(integer) 1`が返ってくる (integer) 1 127.0.0.1:6379> exists key4 # 結果がfalse(存在しない)場合、`(integer) 0`が返ってくる (integer) 0 # 名前を変更 127.0.0.1:6379> rename key key4 OK #確認 127.0.0.1:6379> keys * 1) "key4" <= 変わってる 2) "score" 3) "key1" 4) "key3" 5) "key2" 6) "key_1" # KEYの削除 127.0.0.1:6379> del key4 (integer) 1 # 確認 127.0.0.1:6379> keys * 1) "score" <= 1) "key4"が削除されてる 2) "key1" 3) "key3" 4) "key2" 5) "key_1" 127.0.0.1:6379>
List型
#08 List型を使ってみよう (1) #09 List型を使ってみよう (2)
# KEY: mycollor にvalueを追加 127.0.0.1:6379> rpush mycolor red (integer) 1 # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "red" # mycolorの先頭にvalueを追加 127.0.0.1:6379> lpush mycolor blue (integer) 2 # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "blue" <= 先頭に追加されてる 2) "red" #末尾に複数追加 127.0.0.1:6379> rpush mycolor yellow green (integer) 4 # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "blue" 2) "red" 3) "yellow" <= 追加した順番で追加されてる 4) "green" <= 追加した順番で追加されてる # 範囲を指定して確認 127.0.0.1:6379> lrange mycolor 0 1 1) "blue" 2) "red" 127.0.0.1:6379> lrange mycolor 0 0 1) "blue" # 先頭の値を削除 127.0.0.1:6379> lpop mycolor "blue" # 末尾の値を削除 127.0.0.1:6379> rpop mycolor "green" # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "red" 2) "yellow" # 再度末尾に値を追加 127.0.0.1:6379> rpush mycolor green blue (integer) 4 # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "red" 2) "yellow" 3) "green" 4) "blue" # 要素の数を返す 127.0.0.1:6379> llen mycolor (integer) 4 # ○番目にある要素を返す 127.0.0.1:6379> lindex mycolor 3 "green" # 先頭から2までに値を制限 127.0.0.1:6379> ltrim mycolor 0 2 OK # 確認 127.0.0.1:6379> lrange mycolor 0 -1 1) "red" 2) "yellow" 3) "green" <= 4)が消えてる
Set型
# myset1というSetに値を追加 127.0.0.1:6379> sadd myset1 a (integer) 1 127.0.0.1:6379> sadd myset1 b (integer) 1 127.0.0.1:6379> sadd myset1 c (integer) 1 127.0.0.1:6379> sadd myset1 d (integer) 1 # myset1を確認 127.0.0.1:6379> smembers myset1 1) "d" 2) "b" 3) "c" 4) "a" # myset2というSetに値を追加 127.0.0.1:6379> sadd myset2 d (integer) 1 127.0.0.1:6379> sadd myset2 c (integer) 1 127.0.0.1:6379> sadd myset2 ce (integer) 1 127.0.0.1:6379> sadd myset2 f (integer) 1 # myset2を確認 127.0.0.1:6379> smembers myset2 1) "f" 2) "ce" 3) "d" 4) "c" # myset1とmyset2の和集合を確認 127.0.0.1:6379> sunion myset1 myset2 1) "f" 2) "ce" 3) "d" 4) "c" 5) "b" 6) "a" # 和集合から新たなセットを作成 127.0.0.1:6379> sunionstore myunion myset1 myset2 (integer) 6 127.0.0.1:6379> smembers myunion 1) "f" 2) "ce" 3) "d" 4) "c" 5) "b" 6) "a" # myset1とmyset2の積集合を確認 127.0.0.1:6379> sinter myset1 myset2 1) "d" 2) "c" # 積集合から新たなセットを作成 127.0.0.1:6379> sinterstore myinter myset1 myset2 (integer) 2 127.0.0.1:6379> smembers mydinter (empty list or set) 127.0.0.1:6379> smembers myinter 1) "d" 2) "c" # myset1とmyset2の差を確認 127.0.0.1:6379> sdiff myset1 myset2 1) "b" 2) "a" # 差から新たなセットを作成 127.0.0.1:6379> sdiffstore mydiff myset1 myset2 (integer) 2 127.0.0.1:6379> smembers mydiff 1) "b" 2) "a"
恥ずかしながら和集合、積集合の意味がわからなかったので、調べた。
和集合: 和集合は合併とも言う。要素(元)を合わせた集合。
積集合: 積集合は共通部分の集合のこと。両者に共通の要素(元)だけを合わせた集合。
和集合と積集合の違いを教えてください。 よろしくお願いします。
Sorted Set型
# hs というkeyに値を追加 127.0.0.1:6379> zadd hs 22 taguti (integer) 1 127.0.0.1:6379> zadd hs 40 tanaka (integer) 1 127.0.0.1:6379> zadd hs 79 kobayasi (integer) 1 127.0.0.1:6379> zadd hs 50 satou (integer) 1 # hsを表示 127.0.0.1:6379> zrange hs 0 -1 1) "taguti" 2) "tanaka" 3) "satou" 4) "kobayasi" <= スコアが低い順に並ぶ # 逆順にソートする 127.0.0.1:6379> zrevrange hs 0 -1 1) "kobayasi" 2) "satou" 3) "tanaka" 4) "taguti" <= 逆順にソートされてる # 順位を求める(0から始まる) 127.0.0.1:6379> zrank hs taguti (integer) 0 127.0.0.1:6379> zrank hs tanaka (integer) 1 # 逆順のランキングを求める 127.0.0.1:6379> zrevrank hs tanaka (integer) 2
Hash型
# userというhashにkeyとvalueを追加 127.0.0.1:6379> hset user name taguti (integer) 1 # 複数追加 127.0.0.1:6379> hmset user email taguti@gmai.com score 120 OK # 値を表示 127.0.0.1:6379> hget user name "taguti" # 複数表示 127.0.0.1:6379> hmget user name score 1) "taguti" 2) "120" # 長さを表示 127.0.0.1:6379> hlen user (integer) 3 # keyの一覧を表示 127.0.0.1:6379> hkeys user 1) "name" 2) "email" 3) "score" # value の一覧を表示 127.0.0.1:6379> hvals user 1) "taguti" 2) "taguti@gmai.com" 3) "120" # keyとvalueの一覧を表示 127.0.0.1:6379> hgetall user 1) "name" 2) "taguti" 3) "email" 4) "taguti@gmai.com" 5) "score" 6) "120"
Sort
# mynumberというkeyに値を追加 127.0.0.1:6379> rpush mynumber 10 (integer) 1 127.0.0.1:6379> rpush mynumber 20 (integer) 2 127.0.0.1:6379> rpush mynumber 15 (integer) 3 127.0.0.1:6379> rpush mynumber 100 (integer) 4 # mynumberを表示 127.0.0.1:6379> lrange mynumber 0 -1 1) "10" 2) "20" 3) "15" 4) "100" # mynumberをソート 127.0.0.1:6379> sort mynumber 1) "10" 2) "15" 3) "20" 4) "100" # mynumberを逆順にソート 127.0.0.1:6379> sort mynumber desc 1) "100" 2) "20" 3) "15" 4) "10" # 表示数を制限してソート 127.0.0.1:6379> sort mynumber desc limit 0 2 1) "100" 2) "20"
multi/exec
# visitor と counterというkeyにvalue:1をセット 127.0.0.1:6379> get visitor "1" 127.0.0.1:6379> get counter "1" # まとめて処理をする 127.0.0.1:6379> multi OK # 値を10ずつ増やす 127.0.0.1:6379> incrby visitor 10 QUEUED <= Queに入る 127.0.0.1:6379> incrby counter 20 QUEUED <= Queに入る # 実行 127.0.0.1:6379> exec 1) (integer) 11 2) (integer) 21 # 確認 127.0.0.1:6379> get counter "21" 127.0.0.1:6379> get visitor "11"
ざっくり概要はわかった。
これで何ができるかはまだわからないけど、それは色々やってみて覚えていこう。