<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en-US">
	<title>Angel's Blog</title>
	<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php" />
	<modified>2026-05-13T17:35:54Z</modified>
	<author>
		<name>Angel</name>
	</author>
	<copyright>Copyright 2026, Angel</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.7.0">SPHPBLOG</generator>
	<entry>
		<title>Miscellaneous Notes</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry240706-235032" />
		<content type="text/html" mode="escaped"><![CDATA[Miscellaneous notes for troubleshooting, gathering information about a redis/valkey setup, etc.<br /><br /><pre>acool@acool-HP-EliteBook-8440p:~/redis-cluster$ date<br />Sat 06 Jul 2024 04:44:24 PM PDT<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli --version<br />redis-cli 5.0.7<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### Find out node&#039;s role<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7000 INFO|grep role<br />role:master<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### If node is master...<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7000 INFO|grep slave0<br />slave0:ip=127.0.0.1,port=7005,state=online,offset=7532,lag=0<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### Verify this node is slave...<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7005 INFO|grep role<br />role:slave<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### Find out node&#039;s master...<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7005 INFO | egrep &quot;master_(host|port)&quot;<br />master_host:127.0.0.1<br />master_port:7000<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### Find out node&#039;s mode...<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7003 INFO | egrep mode<br />redis_mode:cluster<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$  ###  List all cluster nodes<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7004 CLUSTER NODES<br />99f95692421cd04661c93ef9f09e058a7a80a6e4 127.0.0.1:7002@17002 master - 0 1720310325000 3 connected 10923-16383<br />8589237392750f2df8618bcda4e92e3996dda07a 127.0.0.1:7005@17005 slave 02c090059770ba140c14a1f26a16b3457fd58bf1 0 1720310324000 6 connected<br />c53fa6a32d9646c21549346716f01a5147cb8bb9 127.0.0.1:7001@17001 master - 0 1720310325468 2 connected 5461-10922<br />02c090059770ba140c14a1f26a16b3457fd58bf1 127.0.0.1:7000@17000 master - 0 1720310325000 1 connected 0-5460<br />ed206ea99f372d34dee37433b7747b5f2b2a3a40 127.0.0.1:7003@17003 slave c53fa6a32d9646c21549346716f01a5147cb8bb9 0 1720310325567 4 connected<br />05fe8b609e4b13d0510ed9b32b27b84502898595 127.0.0.1:7004@17004 myself,slave 99f95692421cd04661c93ef9f09e058a7a80a6e4 0 1720310323000 5 connected<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### This command seems to run INFO in all cluster nodes...                <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli --cluster call 127.0.0.1:7000 INFO|grep role<br />role:master<br />role:master<br />role:slave<br />role:slave<br />role:slave<br />role:master<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ### monitor node<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7005 monitor<br />...<br /></pre><br />Find out data directory and config path:<br /><pre>acool@acool-HP-EliteBook-8440p:~/redis-cluster$ ####### FIND PATH for rdb AND aof FILES!!!! #######<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli -c -p 7000 CONFIG GET dir<br />1) &quot;dir&quot;<br />2) &quot;/home/acool/redis-cluster/7000&quot;<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli --cluster call 127.0.0.1:7000 CONFIG GET dir<br />&gt;&gt;&gt; Calling CONFIG GET dir<br />127.0.0.1:7000: dir<br />/home/acool/redis-cluster/7000<br />127.0.0.1:7001: dir<br />/home/acool/redis-cluster/7001<br />127.0.0.1:7004: dir<br />/home/acool/redis-cluster/7004<br />127.0.0.1:7005: dir<br />/home/acool/redis-cluster/7005<br />127.0.0.1:7003: dir<br />/home/acool/redis-cluster/7003<br />127.0.0.1:7002: dir<br />/home/acool/redis-cluster/7002<br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ <br />acool@acool-HP-EliteBook-8440p:~/redis-cluster$ redis-cli --cluster call 127.0.0.1:7000 INFO | grep -i config_file<br />...<br /></pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry240706-235032</id>
		<issued>2024-07-06T00:00:00Z</issued>
		<modified>2024-07-06T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Valkey Cluster Demo</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry240705-213550" />
		<content type="text/html" mode="escaped"><![CDATA[<pre>[acool@localhost ~]$ date<br />Fri Jul  5 01:48:53 PM PDT 2024<br />[acool@localhost ~]$ cat /etc/redhat-release <br />Fedora release 38 (Thirty Eight)<br />[acool@localhost ~]$ sudo dnf install valkey<br />...<br />[acool@localhost ~]$ valkey-cli --version<br />valkey-cli 7.2.4<br />[acool@localhost ~]$<br />[acool@localhost ~]$ # just in case...<br />[acool@localhost ~]$ systemctl stop valkey.service<br />[acool@localhost ~]$ systemctl status valkey.service<br />...<br />[acool@localhost ~]$ which valkey-server<br />/usr/bin/valkey-server<br />[acool@localhost ~]$<br />[acool@localhost ~]$ mkdir valkey-cluster-demo<br />[acool@localhost ~]$ cd valkey-cluster-demo/<br />[acool@localhost valkey-cluster-demo]$ vim valkey.conf<br />...<br />[acool@localhost valkey-cluster-demo]$ cat valkey.conf<br />port 7000<br />cluster-enabled yes<br />cluster-config-file nodes.conf<br />cluster-node-timeout 5000<br />appendonly yes<br />[acool@localhost valkey-cluster-demo]$<br />[acool@localhost valkey-cluster-demo]$ mkdir cluster-test<br />[acool@localhost valkey-cluster-demo]$ cd cluster-test/<br />[acool@localhost cluster-test]$ mkdir -p {7000..7005}<br />[acool@localhost cluster-test]$ for i in {7000..7005}; do cp ../valkey.conf $i; done<br />[acool@localhost cluster-test]$ # open 7 tabs, update ports and start servers<br />[acool@localhost cluster-test]$ # TIP to update ports: for i in {0..5}; do  sed -i &#039;s/7000/700&#039;&quot;$i&quot;&#039;/g&#039;  &quot;700$i/redis.conf&quot; ; done<br />[acool@localhost cluster-test]$ cd 7000/<br />[acool@localhost 7000]$ /usr/bin/valkey-server ./valkey.conf<br />...<br />[acool@localhost valkey-cluster-demo] # create cluster<br />[acool@localhost valkey-cluster-demo]$ valkey-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1<br />...<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -p 7000 cluster nodes<br />384d585df521f8588a03b57a38e871549c0e58c4 127.0.0.1:7001@17001 master - 0 1720214911355 2 connected 5461-10922<br />5d2edcbba8f394a612df5253bd19a9399f97f4ff 127.0.0.1:7002@17002 master - 0 1720214912358 3 connected 10923-16383<br />4cf4150f20ae444422f0dabbc29b0a75878b1a2d 127.0.0.1:7004@17004 slave c88d6bea070f64023a2c7f27831bbbd113b2ff03 0 1720214912000 1 connected<br />e40a58e318f277ce2d420f7cb77480d5643c28c4 127.0.0.1:7005@17005 slave 384d585df521f8588a03b57a38e871549c0e58c4 0 1720214913362 2 connected<br />c88d6bea070f64023a2c7f27831bbbd113b2ff03 127.0.0.1:7000@17000 myself,master - 0 1720214912000 1 connected 0-5460<br />5b13cd8e34b47890e88fb48e30a99174ba19b751 127.0.0.1:7003@17003 slave 5d2edcbba8f394a612df5253bd19a9399f97f4ff 0 1720214911354 3 connected<br />[acool@localhost valkey-cluster-demo]$<br />[acool@localhost valkey-cluster-demo]$<br />[acool@localhost valkey-cluster-demo]$ # To connect to Valkey Cluster, you&#039;ll need a cluster-aware Valkey client...<br />[acool@localhost valkey-cluster-demo]$ # ...store some keys<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -c -p 7000<br />127.0.0.1:7000&gt; set firstname Angel<br />-&gt; Redirected to slot [7108] located at 127.0.0.1:7001<br />OK<br />127.0.0.1:7001&gt; set lastname Cool<br />OK<br />127.0.0.1:7001&gt;exit<br />[acool@localhost valkey-cluster-demo]$<br />[acool@localhost valkey-cluster-demo]$ # Retrive some keys<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -c -p 7005<br />127.0.0.1:7005&gt; get lastname<br />-&gt; Redirected to slot [7726] located at 127.0.0.1:7001<br />&quot;Cool&quot;<br />127.0.0.1:7001&gt; get firstname<br />&quot;Angel&quot;<br />127.0.0.1:7001&gt;exit<br />[acool@localhost valkey-cluster-demo]$<br />[acool@localhost valkey-cluster-demo]$</pre><br /><br />TIP: Easy way to start all servers:<br /><pre>acool@acool-HP-EliteBook-8440p:~/redis-cluster$ for i in {0..5}; do  cd /home/acool/redis-cluster/700$i &amp;&amp; /usr/bin/redis-server redis.conf --daemonize yes; done</pre><br /><br />Bonus: Pub/Sub demo<br /><br /><pre>[acool@localhost valkey-cluster-demo]$ # TERMINAL 1<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -c -p 7001<br />127.0.0.1:7001&gt; SUBSCRIBE channel-a<br />...<br />[acool@localhost valkey-cluster-demo]$ # TERMINAL 2<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -c -p 7002<br />127.0.0.1:7002&gt; SUBSCRIBE channel-b<br />...<br /><br />[acool@localhost valkey-cluster-demo]$ # TERMINAL 3<br />[acool@localhost valkey-cluster-demo]$ valkey-cli -c -p 7000<br />127.0.0.1:7000&gt; PUBLISH channel-a &quot;Hello channel a!&quot;<br />(integer) 0<br />127.0.0.1:7000&gt; PUBLISH channel-b &quot;Hello channel b!&quot;<br />(integer) 0<br />127.0.0.1:7000&gt; <br />127.0.0.1:7000&gt; exit<br />[acool@localhost valkey-cluster-demo]$ # Monitor output in TERMINAL 1 and 2</pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry240705-213550</id>
		<issued>2024-07-05T00:00:00Z</issued>
		<modified>2024-07-05T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Redis 101 - My Humble Notes.</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry150525-160344" />
		<content type="text/html" mode="escaped"><![CDATA[Basic Commands:<br /><pre>[acool@localhost ~]$ redis-server --version<br />Redis server v=2.8.18 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=94164e7f0a3c47c9<br />[acool@localhost ~]$ <br />[acool@localhost ~]$ sudo systemctl start redis<br />[acool@localhost ~]$ redis-cli<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; INFO<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; SET fullName &quot;Angel Cool&quot;<br />OK<br />127.0.0.1:6379&gt; GET fullName<br />&quot;Angel Cool&quot;<br />127.0.0.1:6379&gt; DEL fullName<br />(integer) 1<br />127.0.0.1:6379&gt; GET fullName<br />(nil)<br />127.0.0.1:6379&gt; INCR attempts<br />(integer) 1<br />127.0.0.1:6379&gt; INCR attempts<br />(integer) 2<br />127.0.0.1:6379&gt; GET attempts<br />&quot;2&quot;<br />127.0.0.1:6379&gt; SETNX attempts 25  //set if not exist<br />(integer) 0<br />127.0.0.1:6379&gt; GET attempts<br />&quot;2&quot;<br />127.0.0.1:6379&gt; SET token abc123<br />OK<br />127.0.0.1:6379&gt; EXPIRE token 60<br />(integer) 1<br />127.0.0.1:6379&gt; TTL token<br />(integer) 51<br />127.0.0.1:6379&gt; TTL token<br />(integer) 44<br />127.0.0.1:6379&gt; SETEX token 120 321abc  //set &amp; expire but atomic ;)<br />OK<br />127.0.0.1:6379&gt; TTL token<br />(integer) 116<br />127.0.0.1:6379&gt; TTL token<br />(integer) 114<br />127.0.0.1:6379&gt; keys *   //get all keys in redis<br />1) &quot;friends&quot;<br />2) &quot;attempts&quot;<br />3) &quot;TOKEN&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; type friends  // get key type, possible types: string, list, set, zset, hash.<br />list<br />127.0.0.1:6379&gt; type attempts<br />string<br /></pre><br /><br />Lists:<br /><pre>127.0.0.1:6379&gt; RPUSH friends Daniel  //push a new value at the end of a list<br />(integer) 1<br />127.0.0.1:6379&gt; RPUSH friends William<br />(integer) 2<br />127.0.0.1:6379&gt; RPUSH friends Alex<br />(integer) 3<br />127.0.0.1:6379&gt; RPUSH friends Rene<br />(integer) 4<br />127.0.0.1:6379&gt; LRANGE friends 0 -1  //get all entries in list<br />1) &quot;Daniel&quot;<br />2) &quot;William&quot;<br />3) &quot;Alex&quot;<br />4) &quot;Rene&quot;<br />127.0.0.1:6379&gt; LPUSH friends Elizabeth //push a new value at the start of a list<br />(integer) 5<br />127.0.0.1:6379&gt; LLEN friends //returns the current lenght of a list<br />(integer) 5<br />127.0.0.1:6379&gt; LRANGE friends 2 3 //returns a subset of a list<br />1) &quot;William&quot;<br />2) &quot;Alex&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; LPOP friends  //removes the first element from the list and returns it<br />&quot;Elizabeth&quot;<br />127.0.0.1:6379&gt; RPOP friends  //removes the last element from the list and returns it<br />&quot;Rene&quot;<br />127.0.0.1:6379&gt; <br /></pre><br /><br />Sets:<br /><pre>127.0.0.1:6379&gt; SADD countries Canada<br />(integer) 1<br />127.0.0.1:6379&gt; SADD countries Chile<br />(integer) 1<br />127.0.0.1:6379&gt; SADD countries Brazil<br />(integer) 1<br />127.0.0.1:6379&gt; SADD countries Mexico<br />(integer) 1<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; SMEMBERS countries  //output all members of a set<br />1) &quot;Canada&quot;<br />2) &quot;Mexico&quot;<br />3) &quot;Brazil&quot;<br />4) &quot;Chile&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; SISMEMBER countries Mexico //test if a value is in a set<br />(integer) 1<br />127.0.0.1:6379&gt; SREM countries Mexico  //removes a value from a set<br />(integer) 1<br />127.0.0.1:6379&gt; SISMEMBER countries Mexico<br />(integer) 0<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; SMEMBERS cities<br />1) &quot;London&quot;<br />2) &quot;Los Angeles&quot;<br />3) &quot;Merida&quot;<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; SUNION cities countries //combines sets and returns all members<br />1) &quot;Merida&quot;<br />2) &quot;London&quot;<br />3) &quot;Canada&quot;<br />4) &quot;Brazil&quot;<br />5) &quot;Los Angeles&quot;<br />6) &quot;Chile&quot;</pre><br /><br />Sorted Sets:<br /><pre>127.0.0.1:6379&gt; ZADD hackers 1940 &quot;Alan Kay&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; ZADD hackers 1906 &quot;Grace Hopper&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; ZADD hackers 1953 &quot;Richard Stallman&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; ZADD hackers 1965 &quot;Yukihiro Matsumoyo&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; ZADD hackers 1983 &quot;Angel Cool&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; ZRANGE hackers 2 3 WITHSCORES<br />1) &quot;Richard Stallman&quot;<br />2) &quot;1953&quot;<br />3) &quot;Yukihiro Matsumoyo&quot;<br />4) &quot;1965&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; ZADD hackers 1980 &quot;Karla Cool&quot;<br />(integer) 1<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; ZRANGE hackers 0 -1 WITHSCORES //all scores, see how it&#039;s sorted by score (date of birth)<br /> 1) &quot;Grace Hopper&quot;<br /> 2) &quot;1906&quot;<br /> 3) &quot;Alan Kay&quot;<br /> 4) &quot;1940&quot;<br /> 5) &quot;Richard Stallman&quot;<br /> 6) &quot;1953&quot;<br /> 7) &quot;Yukihiro Matsumoyo&quot;<br /> 8) &quot;1965&quot;<br /> 9) &quot;Karla Cool&quot;<br />10) &quot;1980&quot;<br />11) &quot;Angel Cool&quot;<br />12) &quot;1983&quot;<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; ZREVRANGE hackers 0 -1 withscores  // reverse score<br /> 1) &quot;Angel Cool&quot;<br /> 2) &quot;1983&quot;<br /> 3) &quot;Yukihiro Matsumoyo&quot;<br /> 4) &quot;1965&quot;<br /> 5) &quot;Richard Stallman&quot;<br /> 6) &quot;1953&quot;<br /> 7) &quot;Alan Kay&quot;<br /> 8) &quot;1940&quot;<br /> 9) &quot;Grace Hopper&quot;<br />10) &quot;1906&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; ZCOUNT hackers -inf +inf // returns the number of items in zset<br />(integer) 5<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; ZREMRANGEBYSCORE hackers 1940 1960 <br />(integer) 2<br /></pre><br /><br />Hashes<br /><pre>127.0.0.1:6379&gt; HSET user:1000 firstName Angel<br />(integer) 1<br />127.0.0.1:6379&gt; HSET user:1000 lastName Cool<br />(integer) 1<br />127.0.0.1:6379&gt; HSET user:1000 website angelcool.net<br />(integer) 1<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; HGET user:1000 firstName<br />&quot;Angel&quot;<br />127.0.0.1:6379&gt;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; HMSET user:2000 firstName Richard lastName Stallman website stallman.org<br />OK<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; HGET user:2000 website<br />&quot;stallman.org&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; HGETALL user:2000<br />1) &quot;firstName&quot;<br />2) &quot;Richard&quot;<br />3) &quot;lastName&quot;<br />4) &quot;Stallman&quot;<br />5) &quot;website&quot;<br />6) &quot;stallman.org&quot;<br />127.0.0.1:6379&gt; <br />127.0.0.1:6379&gt; <br /></pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry150525-160344</id>
		<issued>2015-05-25T00:00:00Z</issued>
		<modified>2015-05-25T00:00:00Z</modified>
	</entry>
</feed>
