由于生产环境的并发量很高,所有数据不能全部从数据库中查找,一部分数据肯定是需要放到缓存中(memcached\redis),如果数据更改为了保证数据一致性肯定是需要更新缓存的,这个时候如果没有足够晚上的功能就需要手动找到缓存的key删除缓存,就在这个时候遇到了一个key的问题
在程序中找到的key是这个样子的
data_XXXXXXXXXCache_getXXXXXXXXXKey_4161761:3:35008:
连接服务器并删除key
竟然没有删掉,很想知道原因memcache又没有类似于redis keys的命令,只能通过下面的命令慢慢找到key
stats items //列出所有keys
stats cachedump 10 0 //通过itemid获取key
找的时候发现了这样一条key
":"经过URL-encode是%3A,终于找到原因了,接下来可以删除这个key了,然后并没有那么简单
无论是删除key还是getkey都不行,看来只能完善程序的方法删除key了
这个时候想到2个问题
- redis中这样有问题吗?
尝试了一下key中有":"是没有问题
- java 命名规范是不是跟这个有关系
想到一条java命名规范 java语言的标识符由字母\数字\下划线和美元符号组成,第一个字符不能为数字.
看来以后起名字不要随便乱起,避免关键时候踩坑
参考资料 http://www.ttlsa.com/memcache/memcache-list-all-keys/