- 字符串(String)
常用命令:
存登陆者的姓名:set loginUser Lucy 取登陆者的姓名:get loginUser
计数自增自减:incr num1 / desc num1 (每执行一次num1的值自动加1或减1,当然值必须是数值或可以转为数值的值)
查所有存String类型的key:key * 删除键:del key名
确定key是否存在:exists key名
String的内部编码有3种:
int:8个字节的长整型
embstr:<=39个字节的字符串
raw:>39个字节的字符串
String的应用场景:
缓存功能:存取一个对象,注:键的取名以“业务名:对象名:id:[属性]”,如mysql:employee:1:name;
计数功能:如视频点赞、收藏数的自增
共享Session:如在分布式开发中用于储存用户信息供多个服务器访问
限速:如禁止用户多次发送验证信息
- 哈希(hash)
常用命令:
赋值:hset key field value 取值: hget key field 取所有field的值: hgetall key
查key下的所有field:hkeys key 查key下的所有field的值:hvals key
查key下的所有field及field的值:hgetall key 删除key下的某个field:hdel field
内部编码有2种:
ziplist:当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)且同时所有的值都小于hash-max-ziplist-value配置(默认64字节)时,采用ziplist作为哈希的内部实现,ziplist在节省内存方面比hashtable优秀。
hashtable:不满足ziplist则采用hashtable,此时因数据大用hashtable读写效率提高。
应用场景:
使用哈希类型存储对象数据
- 列表(list)
常用命令:
赋值:从队列左边录入值abc:lpush list abc , 从右边录入值 123:rpush list 123
队列数据为:cba123
删除同样分lpop和rpop
查全部数据:lrange list 0 -1
内部编码有2种:
ziplist:当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)且同时所有的值都小于hash-max-ziplist-value配置(默认64字节)时,采用ziplist作为哈希的内部实现,ziplist在节省内存方面比hashtable优秀。
linkedlist:不满足ziplist就采用linkedlist。
应用场景:
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
- 集合(Set):
常用命令:
增:sadd 删:srem 查:smembers
内部编码有2种:
inset:当集合中的元素都是整数且元素个数小于set-max-inset-entries配置(默认512个),更节省内存。
hashtable:不满足inset则采用hashtable.
应用场景:
sadd=Tagging(标签):使用sadd,sinter,sdiff,sunion可以求共同爱好,产品推荐,社交需求
spop/arandmember=Random item(生成随机数:用于抽奖)
- 有序集合(zset):
常用命令:
增:zset 删:zrem 查所有:zrange 0 -1
注:所谓有序集合是由key值为score,根据score的权重(即key值的大小)作为排序的依据。
内部编码有2种:
ziplist:当哈希类型元素个数小于zset-max-ziplist-entries配置(默认128个)且同时所有的值都小于zset-max-ziplist-value配置(默认64字节)时,采用ziplist作为哈希的内部实现,ziplist在节省内存方面比hashtable优秀。
skiplist:不满足ziplist则采用skiplist。
应用场景:
排行榜系统