Redis keys:
作为redis的key需要注意一下几个原则
1. key可以为null
2.key不能太长,太长的话不仅仅消耗内存而且还在查询过程中会提高查询的成本
3 可以不易过短,不方便阅读
Redis String
String类型不仅仅是字符串类型,还可以是数值类型的字符串,比如“”123“”。redis会解析成为int类型进行操作,操作完毕后会再次保存为String类型,对于String的操作是原子操作,也就意味着当并发操作的时候,不会产生脏数据。
通过set/get操作设置
当时数值型的字符串的时候可以实现自增自减
set key 100 ** key:key value:100
incr key // 101 **指定默认自增1
incrby key 50 //151 **指定自增50
getset key 34 ***获取key的值并将key的值设置为34
mset /mget *** 一次设置多个key-value,一次获取多个 key
exits/del **判断是否存在key,删除key
expire key 5 **设置key的存活时间,一旦到了存活时间,就会自动删除
(具体的api在后面的操作上如果不是很重要的话,在操作的时候直接可以查找api,在这里并不会过多的去涉及)
使用场景:根据其自增特性,在统计网站的访客数量时可以使用该数据类型
Redis Lists
lists数据类型顶层是用Linked list链表来实现的,链表存储数据的特点是增删改速度比较快,数据是有序可重复。同时也就意味着,在操作的lists数据类型的时候,可以指定在链头操作也可以在链尾操作,
list上提供非阻塞操作,上文中提过,redis可以作为队列,当时当lredis作为队列的时候,消费者要不断的从redis中获取数据,当redis中数据为空的时候,消费者还不断的从redis中获取数据的话,就会增加其访问压力,造成cpu空转,所以redis提供了响应的api比如:BlPOP/BRPOP 。该命令后面跟着时间n,意味着,redis先去查找库中的元素,当找到的时候直接返回该元素并删除元素,如果没有找到的时候会阻塞n秒后返回 nil 并结束查找。
使用场景:比如消息系统中,作为消息传递,关注列表中使用该数据结构,但是如果是不能重复那么就使用ZSET。
Redis Hash
hash 底层使用的时hasMap,一般用于存储结构化数据,可以理解为JavaBean,使用该数据类型可以减少序列化和反序列化,需要修改/获取value的某一个属性,只需要key+filed(hashMap的key)即可。
使用场景:比如存储用户的个人信息
Redis Set
set数据类型特点是,无序不可重复。可以查找并集交集等等,sunionstore:用来复制信息,底层使用hashmap来实现的,只是改hashmap的value为空,
使用场景:可以将注册的用户信息放入set中,或者投票用户的信息,通过sismember 来判断是否重复注册或者投票。
Redis ZSet
zset数据类型,是有序不可重复的集合,该排序功能通过zset集合的每一个元素和一个score(double类型)进行绑定映射,从而实现排序功能
使用场景:网站统计投票top前10的客户信息,网站访问的客户信息,以访问的时间作为权重,这样自动排序访问客户的数据。
网友评论