开发一个新需求,需要将redis缓存从原有的以公司为key替换为以个人为key,在这过程中,接触到了通过命令行对redis进行操作,之前没有实战,正好是个积累学习的过程。
一 . Connection (连接)
#设置密码
127.0.0.1:6379> config set requirepass 654321 #将密码设置为654321
OK
127.0.0.1:6379> quit #退出再连接,让新密码对客户端生效
[root@iZ283jrawloZ bin]# ./redis-cli -p 6379
127.0.0.1:6379> ping #未验证密码,提示错误,需要验证
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 #密码错误,提示无效的密码
(error) ERR invalid password
127.0.0.1:6379> auth 654321 #密码正确,连接成功
OK
127.0.0.1:6379> ping #ping操作命令成功
PONG
127.0.0.1:6379> echo "hello"
"hello"
127.0.0.1:6379> echo "goodbye"
"goodbye"
#客户端与服务器连接正常
127.0.0.1:6379> ping
PONG
#客户端与服务器连接不正常(网络不正常或服务器未能正常运行)
127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
127.0.0.1:6379> set db_number 0 #默认使用0号数据库
OK
127.0.0.1:6379> select 1 #使用1号数据库
OK
127.0.0.1:6379[1]> get db_number #已切换至1号数据库,命令提示符多了[1]
(nil)
127.0.0.1:6379[1]> set db_number 1
OK
127.0.0.1:6379[1]> get db_number
"1"
127.0.0.1:6379[1]> select 3 #切换至3号数据库
OK
127.0.0.1:6379[3]> select 0 #命令提示符从[1]变成[3],再切换回默认数据库
OK
127.0.0.1:6379>
二 . Server (服务器)
127.0.0.1:6379> client getname #新连接默认没有名字
(nil)
127.0.0.1:6379> client setname connection1 #设置名字
OK
127.0.0.1:6379> client getname #返回名字
"connection1"
127.0.0.1:6379> client list
id=2221941 addr=115.28.**.**:34696 fd=321 name= age=76816 idle=76816 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=2221942 addr=115.28.**.**:34698 fd=322 name= age=76816 idle=76799 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=2111339 addr=115.28.**.**:54388 fd=87 name= age=251748 idle=251748 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=2261669 addr=115.28.**.**:56662 fd=386 name= age=46217 idle=46217 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=zadd
id=2261670 addr=115.28.**.**:56664 fd=387 name= age=46217 idle=46217 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=2220106 addr=115.28.**.**:34420 fd=302 name= age=78658 idle=76946 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
返回多行字符串,每个已连接客户端对应一行,每行字符串由一系列 属性=值 形式的域组成,每个域以空格分开。域的含义如下:
cmd : 最近一次执行的命令
CLIENT KILL ip:port:关闭地址为ip:port的客户端。因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。
CONFIG GET (CONFIG GET parameter) :用于获取redis服务器的配置参数。在2.4版本中,有些参数无法通过CONFIG GET访问,但在2.6版本中,所有的配置参数都可以用CONFIG GET访问。
# 查询所有的配置项
127.0.0.1:6379> config get *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "654321"
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
10) ""
11) "logfile"
12) "/var/redis/log/redis.log"
13) "pidfile"
14) "/var/redis/run/redis_6379.pid"
15) "slave-announce-ip"
16) ""
#查询所有以s开头的配置项
127.0.0.1:6379> config get s*
1) "slave-announce-ip"
2) ""
3) "set-max-intset-entries"
4) "512"
5) "slowlog-log-slower-than"
6) "10000"
7) "slowlog-max-len"
8) "128"
9) "slave-priority"
10) "100"
11) "slave-announce-port"
12) "0"
13) "slave-serve-stale-data"
14) "yes"
15) "slave-read-only"
16) "yes"
17) "stop-writes-on-bgsave-error"
18) "no"
19) "slave-lazy-flush"
20) "no"
21) "supervised"
22) "no"
23) "syslog-facility"
24) "local0"
25) "save"
26) "900 1 300 10 60 10000"
27) "slaveof"
28) ""
#获取指定配置项
127.0.0.1:6379> config get save
1) "save"
2) "900 1 300 10 60 10000"
#上面 save 参数的三个值表示:在 900 秒内最少有 1 个 key 被改动,
或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,
以上三个条件随便满足一个,就触发一次保存操作。
Keyspace hits (键空间命中次数)
Keyspace misses (键空间不命中次数)
Number of commands processed (执行命令的次数)
Number of connections received (连接服务器的次数)
Number of expired keys (过期key的数量)
Number of rejected connections (被拒绝的连接数量)
Latest fork(2) time(最后执行 fork(2) 的时间)
The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)
CONFIG REWRITE :对启动 Redis 服务器时所指定的 redis.conf 文件进行改写:因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
对 redis.conf 文件的重写是原子性的, 并且是一致的: 如果重写出错或重写期间服务器崩溃, 那么重写失败, 原有 redis.conf 文件不会被修改。 如果重写成功, 那么 redis.conf 文件为重写后的新文件。
CONFIG SET :可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
DBSIZE :返回当前数据库的 key 的数量。
FLUSHALL:清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。此命令从不失败。
FLUSHDB :清空当前数据库中的所有 key。此命令从不失败。
INFO [section]:返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息.
FLUSHDB :清空当前数据库中的所有 key。此命令从不失败。
三. Key(键)
Keys pattern:查找所有符合给定模式 pattern 的 key 。
DEL key [key …] :删除给定的一个或多个 key 。不存在的 key 会被忽略。
Type key :返回 key 所储存的值的类型。
EXISTS key :检查指定key是否存在
EXPIRE key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
DUMP key :序列化给定 key ,并返回被序列化的值,如果值不存在,返回nil,否则,返回序列化之后的值。
RESTORE key ttl serialized-value:反序列化给定的序列化值,并将它和给定的 key 关联。参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
#匹配数据库中所有key
127.0.0.1:6379> keys unreadAskForPriceCache*
1) "unreadAskForPriceCache:8748"
2) "unreadAskForPriceCache:386"
3) "unreadAskForPriceCache:37"
#匹配以unreadAskForPriceCache开头的key
127.0.0.1:6379> keys unreadAskForPriceCache*
1) "unreadAskForPriceCache:8748"
2) "unreadAskForPriceCache:386"
3) "unreadAskForPriceCache:37"
#查看key的类型
127.0.0.1:6379> type unreadAskForPriceCache:295
zset
#删除指定key
127.0.0.1:6379> del unreadAskForPriceCache:295
(integer) 1
#序列化给定 key
127.0.0.1:6379> dump userAccount:w256
"\x00\xc3A\x83B0\x11{\"employeeId\":305,\xe0\x00\x10\x0eCity\":\"9\",\"ding@\x03\x0fName\":null,\"shor\x80\x0f\x00\" !\x04isUse A\x001 \n\nnsertPerson \x1c\x000@\x1d`\x12\x01Ti\xe0\x01=\x05update\x
e0\x04$\x80\x12\xe0\x03$\x0bisShipper\":0`\r\x02ell\xe0\x01\x0c\x06torehou l\xa0\x1e\x04Manag\xa0\r\x05deptKe \xbf\x80\xac\x00n`\xb8\t\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0 \x93\x02cod \xcb\x04\"w256 \r\x06address\xc0/\x06postalC`\"\x80A\tofficePhon 5\x80\x12\x04mobil\xc0\x12\n\"1367696187@O\x04email\xc0( K\x00t\xe0\x005@\x99Ak\x02\"10A\x1a\x03regiA'\x80R\x06provinc\xe0\x00,\x06orderNo`\xe0\x02sex\xc0&\x03area@\x9c\xe0\x00\xaf\x02mem $\x80C@\x0b\x001\xe0\x03\x0c\x002\xe0\x03\x0c\x003\xe0\x03\x0c\x004\xe0\x03\x0c\x02num\xc0\x0eAT@\xa3\x02293A(\x04mpany@\x0f\x010}\b\x00\xbc%\xce\xe4yN\xdb\x95"
#反序列化给定的序列化值
127.0.0.1:6379> restore userAccout:256 0 "\x00\xc3A\x83B0\x11{\"employeeId\":305,\xe0\x00\x10\x0eCity\":\"9\",\"ding@\x03\x0fName\":null,\"shor\x80\x0f\x00\" !\x04isUse A\x001 \n\nnsertPerson \x1c\
x000@\x1d`\x12\x01Ti\xe0\x01=\x05update\xe0\x04$\x80\x12\xe0\x03$\x0bisShipper\":0`\r\x02ell\xe0\x01\x0c\x06torehou l\xa0\x1e\x04Manag\xa0\r\x05deptKe \xbf\x80\xac\x00n`\xb8\t\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0 \x93\x02cod \xcb\x04\"w256 \r\x06address\xc0/\x06postalC`\"\x80A\tofficePhon 5\x80\x12\x04mobil\xc0\x12\n\"1367696187@O\x04email\xc0( K\x00t\xe0\x005@\x99Ak\x02\"10A\x1a\x03regiA'\x80R\x06provinc\xe0\x00,\x06orderNo`\xe0\x02sex\xc0&\x03area@\x9c\xe0\x00\xaf\x02mem $\x80C@\x0b\x001\xe0\x03\x0c\x002\xe0\x03\x0c\x003\xe0\x03\x0c\x004\xe0\x03\x0c\x02num\xc0\x0eAT@\xa3\x02293A(\x04mpany@\x0f\x010}\b\x00\xbc%\xce\xe4yN\xdb\x95"OK
127.0.0.1:6379> get userAccount:256
"{\"employeeId\":220,\"employeeCity\":\"22\",\"dingdingName\":\"\",\"shorName\":\"\xe4\xbc\x81\xe9\xb9\x85\",\"isUsed\":0,\"insertPerson\":\"70\",\"insertTime\":null,\"updatePerson\":\"70\",\"updat
eTime\":null,\"isShipper\":0,\"isSeller\":0,\"isStorehouser\":0,\"isManager\":0,\"deptKey\":null,\"name\":\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0\",\"code\":\"256\",\"address\":\"\",\"postalCode\":null,\"officePhone\":\"\",\"mobilePhone\":\"13676961876\",\"email\":\"\",\"state\":null,\"deptId\":\"185\",\"region\":null,\"province\":null,\"orderNo\":0,\"sex\":null,\"areaCodes\":null,\"memo\":null,\"memo1\":null,\"memo2\":null,\"memo3\":null,\"memo4\":null,\"memonum\":null,\"userId\":208,\"companyId\":0}"
#批量删除所有匹配的key
redis-cli -a uqiauto -p 7001 -n 0 keys "unreadAskForPriceCache*" | xargs redis-cli -a uqiauto -p 7001 -n 0 del