一、Redis的数据类型
Redis 3.x版本中常用的数据类型有字符串类型、哈希类型、集合类型、有序集合类型与列表类型,合理使用正确的数据类型,可以有效的降低开发工作,对于在MySQL中一些需要复杂SQL才能完成的工作,在Redis中通过一条简单命令即可实现。
二、字符串类型
通常运用于分布式系统的session会话缓存共享、浏览计数器等,比如直播时的浏览量就可以使用incr、decr来实现,刷礼物时通过incrby命令来实现。字符串类型有点万金油,但是由于它需要额外的空间来记录数据长度、内存使用等元数据,当实际保存的数据本身很小时,元数据的空间开销反而显得就很大了。字符串类型的使用在上篇文章中已经讲到,这里不再累述
三、Hash类型
常当作数据库缓存使用,如商品购物车、用户或者产品的详情信息。哈希类型的数据适合存储对象,其数据结构有点像MySQL表中的一行数据,包含了多个字段。MySQL是一张表里存放了多个字段和值,而Redis的Hash类型就是一个key里存放了多个字段和值。由于一个Hash对应一个集合的数据,但是也只使用一个dictEntry来存储元数据,所以会比字符串类型的数据更节省内存空间
1、设置Redis Hash Key
# hset key field value
# hsetnx key field value
# hmset key field1 value1 field2 value2
hset tanglu age 30 #设置一个hash key,名为tanglu,然后age字段的值为30
hset tanglu sex male #为tanglu新增一个sex字段,值位male
hmset tanglu height 175 weight 70 #一次新增多个字段
2、获取Redis Hash Key元素个数
# hlen key
hlen tanglu #显示结果为4,因为上面示例设置了age sex height weight一共4个字段
# hget key filed
# hmget key field1 field2 #获取多个值
hget tanglu name #获取指定字段的值,get的时候必须写清楚表名和字段名
hmget tanglu height weight
3、获取Hash Key所有字段的值,同keys命令一样需谨慎使用
hgetall key #显示出该Hash类型的key下的所有字段和值,谨慎使用
hkeys key #仅显示该Hash类型的key下的所有字段
hvals key #和上一步相反,显示的是具体的值
4、删除Hash Key中指定的字段和值
hdel key field1 field2...
5、判断Hash Key字段是否存在,返回1代表存在,0代表不存在
hexists key field #一次只能跟一个字段
四、Redis list类型
list列表类型的数据一般用于消息队列(比如使用redis作为ES的消息队列,当发现ES没有日志进来的时候,可以先看redis消息队列中是否有数据),可以让一个key拥有多个value,且值可重复
lpush names tanglu #从左边开始插入数据
lpush names tom
lpush names tanglu #故意定义了重复的value
lrange names 0 -1 #获取列表里的全部值,0和-1是起始和结束范围,后进入的key的值反而是在前面的
lrange names 0 1 #获取第一个和第二个值
lrem names 1 tanglu #移除一个值为tanglu的列,这里将会按照序号移除。如果要移除所有的话,序号写0
lpop names #按照后进先出的方式读取列表里的数据,可当做消息队列
rpop names #先进先出
del names #删除列表
五、Redis集合
分为了有序集合(zset)和无序集合(set),集合内的元素不可重复。无序集合通过交集、差集或并集获得需要的数据,常用于社交软件共同好友、微博圈子,有序集合常用于排行榜。
sadd ages 25
sadd ages 30
sadd ages 32
sadd ages 25 #重复定义,会添加失败
smembers ages #显示集合中的元素,由于是无序的,不用再指定序号
srem ages 25 #移除一个元素
sismember ages 30 #检查集合中有没有30这个元素