Redis的API的使用和理解
1.通用命令
keys [pattern] (遍历所有的key,一般不在生产环境中使用 可用scan代替) dbsize (计算key的总数)
exists key (检查key是否存在 存在返回1 不存在返回0) del key(删除指定的key key可以设置多个)
expire key seconds (key 在seconds 秒后过期) persist key (去掉key的过期时间)
ttl key(查看key剩余的过期时间 返回值-1 代表key存在,且没有过期时间 -2代表key已经不存在了)
type key(返回key的类型 一般有一下6种 1.string 2.hash 3. list 4.set 5.zset 有序集合 6.none 不存在 )
2.数据结构和内部编码
- 字符串(string)
使用场景: 缓存 计数器 分布式锁 等等
命令: get set del 复杂度
get key: 获取key对应的value o(1)
set key value : 设置 key-value 不管key是否存在都设置 o(1)
setnx key value: key不存在才设置 o(1)
set key value xx:key 存在才设置(更新)o(1)
del key: 删除key-value o(1)
整型操作命令: incr decr incrby decrby
incr key:key自增1 如果key不存在,自增后 get(key)=1 o(1)
decr key:key自减1 如果key不存在,自减后 get(key)=-1 o(1)
incrby key k: key自增k 如果key不存在,自增后 get(key)=k o(1)
decrby key k: key自减k 如果key不存在,自减后 get(key)=-k o(1)
批量操作:mget mset
mget key1 key2 key3… :批量获取key,原子操作 o(n)
mset key1 value1 key2 value2… :批量设置key-value o(n)
getset append strlen
getset key newvalue : 相当于 set key newvalue 并返回旧的value
append key value : 将value 追加到旧的value
strlen key : 返回字符串的长度(注意中文)
3.单线程
redis是单线程但为什么这么快?
1.纯内存 (主要原因) 2.非阻塞IO 3.避免线程切换和竞态消耗
单线程注意事项: 1.一次只运行一条命令。 2.拒绝长(慢)命令。 例:keys flushall show lua script 等等3.