memcached的使用:
命令行连接和操作:
telnet连接使用:
memcached默认使用启动服务占用tcp 11211端口,可以通过telnet进行连接使用。
安装telnet进行连接:
连接成功,敲击多次,如果看到error,即连接成功。
显示error的原因,没有输入命令,所以memcached服务器提示error。
退出使用quit命令。
存储命令:
set
set命令用于将value数据值存储在指定的key(键)中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
概念有点类似python中的字典,这个还是很好理解的。
正常我们只要记住set就可以了。
语法:
set key flag exptime bytes
value
多一位少一位都不行。该多少个字节就多少个字节。
对值进行更换:
get
add命令:
add命令用于将value值存储在指定的key键中。
如果add的key已经存在,则不会更新数据(过期的key会更新),之前的值仍保持相同,并且您将获得响应NOT_STORED。
replace:
replace命令用于替换已存在的key(键)的value(数据值)。
如果key不存在,则替换失败,并且您将获得响应NOT_STORED。
存在则替换,不存在则啥也不干。
append:
append命令用于向已存在的key键的value值后面追加数据:
prepend:
prepend命令用于向已存在的key键的value值前面追加数据。
我们正常只要记住set命令就可以了。
删除命令:
delete:
delete命令用于删除已存在的key(值)。
语法:
delete key
flush all:
flush_all 命令用于清理缓存中的所有key/value键值对。
该命令提供了一个可选参数time,用于制定的时间后,正常是s,执行清理缓存的操作。
flush_all(time)
flush_all在业务生产环境上千万不能执行这个操作。如果执行,可能会造成所有缓存清空不存在,所有数据请求都直接到了数据库服务器,造成数据库服务器压力瞬间变大。造成数据库宕机。
另外rm -rf 命令,这个里面的f要少加,这个要特别注意的。
另外数据库的drop命令也是要特别注意的。谨慎操作。
这个数据对公司是业务价值的。一定要有备份。不要嫌麻烦。做好服务的备份,保护数据库的安全。
数据库的数据安全。
查找和计算命令:
get命令:
get命令获取存取在key(键)中的value(数据值),如果key不存在,则返回空。
get key1 key2 key3
语法:incr(相加)/decr(相减)
计数器:每做一次操作+1
incr和decr命令用于对已存在的key键的数字值进行自增或自减操作。
incr和decr命令操作的数据必须是十进制的32位无符号整数。
- incr key value
-
- decr key value
统计状态命令:
语法:stats
stats命令用于返回统计信息例如PID(进程号)、版本号、连接数等。
- stats
- STAT pid 4051
- STAT uptime 9979
- STAT time 1694689746
- STAT version 1.6.21
- STAT libevent 2.0.21-stable
- STAT pointer_size 64
- STAT rusage_user 0.813517
- STAT rusage_system 0.542345
- STAT max_connections 1024
- STAT curr_connections 2
- STAT total_connections 4
- STAT rejected_connections 0
- STAT connection_structures 3
- STAT response_obj_oom 0
- STAT response_obj_count 1
- STAT response_obj_bytes 32768
- STAT read_buf_count 4
- STAT read_buf_bytes 65536
- STAT read_buf_bytes_free 16384
- STAT read_buf_oom 0
- STAT reserved_fds 20
- STAT cmd_get 22
- STAT cmd_set 16
- STAT cmd_flush 2
- STAT cmd_touch 0
- STAT cmd_meta 0
- STAT get_hits 16
- STAT get_misses 6
- STAT get_expired 0
- STAT get_flushed 0
- STAT delete_misses 0
- STAT delete_hits 1
- STAT incr_misses 1
- STAT incr_hits 5
- STAT decr_misses 0
- STAT decr_hits 3
- STAT cas_misses 0
- STAT cas_hits 0
- STAT cas_badval 0
- STAT touch_hits 0
- STAT touch_misses 0
- STAT store_too_large 0
- STAT store_no_memory 0
- STAT auth_cmds 0
- STAT auth_errors 0
- STAT bytes_read 881
- STAT bytes_written 1128
- STAT limit_maxbytes 67108864
- STAT accepting_conns 1
- STAT listen_disabled_num 0
- STAT time_in_listen_disabled_us 0
- STAT threads 4
- STAT conn_yields 0
- STAT hash_power_level 16
- STAT hash_bytes 524288
- STAT hash_is_expanding 0
- STAT slab_reassign_rescues 0
- STAT slab_reassign_chunk_rescues 0
- STAT slab_reassign_evictions_nomem 0
- STAT slab_reassign_inline_reclaim 0
- STAT slab_reassign_busy_items 0
- STAT slab_reassign_busy_deletes 0
- STAT slab_reassign_running 0
- STAT slabs_moved 0
- STAT lru_crawler_running 0
- STAT lru_crawler_starts 18
- STAT lru_maintainer_juggles 19937
- STAT malloc_fails 0
- STAT log_worker_dropped 0
- STAT log_worker_written 0
- STAT log_watcher_skipped 0
- STAT log_watcher_sent 0
- STAT log_watchers 0
- STAT unexpected_napi_ids 0
- STAT round_robin_fallback 0
- STAT bytes 129
- STAT curr_items 2
- STAT total_items 13
- STAT slab_global_page_pool 0
- STAT expired_unfetched 0
- STAT evicted_unfetched 0
- STAT evicted_active 0
- STAT evictions 0
- STAT reclaimed 3
- STAT crawler_reclaimed 0
- STAT crawler_items_checked 29
- STAT lrutail_reflocked 4
- STAT moves_to_cold 17
- STAT moves_to_warm 4
- STAT moves_within_lru 0
- STAT direct_reclaims 0
- STAT lru_bumps_dropped 0
- END
stats参数参考:
pid: memcache服务器进程ID
uptime:服务器已运行秒数
time:服务器当前Unix时间戳
启动时间: time-uptime
version:memcached版本
pointer_size:操作系统指针大小
rusage_user:进程累计用户时间
rusage_system:进程累计系统时间
curr_connections:当前连接数量
total_connections:Memcached运行以来连接总数
connection_structures:Memcached分配的连接结构数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
cmd_flush:flush命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
delete_misses:delete命令未命中次数
delete_hits:delete命令命中次数
incr_misses:incr命令未命中次数
incr_hits:incr命令命中次数
decr_misses:decr命令未命中次数
decr_hits:decr命令命中次数
cas_misses:cas命令未命中次数
cas_hits:cas命令命中次数
cas_badval:使用擦拭次数
auth_cmds:认证命令处理的次数
auth_errors:认证失败数目
bytes_read:读取总字节数
bytes_written:发送总字节数
limit_maxbytes:分配的内存总大小(字节)
accepting_conns:服务器是否达到过最大连接(0/1)
listen_disabled_num:失效的监听数
threads:当前线程数
conn_yields:连接操作主动放弃数目
bytes:当前存储占用的字节数
curr_items:当前存储的数据总数
total_items:启动以来存储的数据总数
evictions:LRU释放的对象数目
reclaimed:已过期的数据条目来存储新数据的数目
缓存命中率:命中数(get获取到数据)/ 获取次数(get的次数)
get_hits/cmd_get, 如果命中率低,业务代码缓存有问题,命中率为0,说明缓存没有起到作用。
缓存预热。
命中率越高,说明我们的缓存做的越好。
缓存穿透:
访问的数据,数据库都不存在的数据,每次都不能够生成缓存,每次请求都直接访问数据库,穿透了缓存,缓存没有起到作用。数据库压力没有得到缓解。
解决方案:数据库查不到的,也做一个空缓存。
一般情况是受到攻击了。直接把对方的IP封掉。deny IP地址。
缓存雪崩:
缓存具有失效时间,如果缓存失效时间都是一样,本来应该请求缓存,但是因为缓存失效了,全部请求到了数据库,数据库压力剧增,可能造成数据库宕机,进而造成系统奔溃。
解决方案:设置缓存的失效时间均匀分布。
最终目的是降低数据库压力。