Redis的基本数据类型

Redis的基本数据类型

1、String类型

它是二进制安全的,可以存储图片等数据。不会因为特殊字符导致字符串结尾,redis是C语言书写的,C的字符串有这种特点。底层是SDS(simple dynamic string),字符串是动态的,类似arraylist。

底层:SDS(simple dynamic string)

用途:缓存用户信息的一个字段

常用命令:set、get、getset key value(先获取值然后再设置)、incr、decr(自增和自减)、incrby key value、decrby key value(加和减某个数)、append key value(追加)、del

2、hash类型

相当于一个hashmap,一种以string为key,string为value的容器。底层类似java中的hashset,也是数组加链表。rehash和java中的集合不同,为了实现高性能,redis采用渐进式rehash ,当rehash时保留新旧两个hash结构,在后续任务中缓慢迁移到新hash中。它也可以缓存用户信息,当不需要用户全部信息,只需要一部分时可以用hash取指定的部分。

底层:字典或ziplist

用途:存储用户信息、商品信息(多个字段)。

常用命令:hset key field value、hget key field(存和取)、hdel key field1 field2(删除key)、hincrby key field value(增加)、hexists key field(判断是否存在该field)、hlen key(获取field的个数)、hkeys key、hvals key(获取所有的field或value)

3、list类型

一个装着string的双端队列。底层使用的数据结构是快速链表quicklist,这种数据结构在数据较少的时候会使用一块连续内存,当数据多起来又会用链表。list类型插入和删除较快,而查找是慢操作。常用来作为异步队列使用,一个线程压入,另一个线程取出任务执行。

底层:quicklist

用途:关注列表、消息列表。

常用命令:lpush key 多个value、rpush key 多个value(从左压入元素、从右压入元素)、lrange key start end(获取元素,查所有可以分别设置为0和-1)、lpop、rpop(从左或右取)、lpushx、rpushx(带检查的插入元素,不存在key就不创建)、lrem key count value(从左到右删count个值为value的,如果想从右到左就将count设置为负)、lset key posi value(设置某个位置的值,索引从1开始)、linsert key before/after index value(在对应位置向前或向后插入元素)

4、set类型

相当于一个hashset,有自动去重效果,set可以轻松实现交集、并集和差集。如果用set来实现关注列表和兴趣,就可以很容易求出共同关注和共同爱好。可以用来做中奖用户的ID,保证一个用户不会中奖两次。

底层:字典

用途:统计不同ID

常用命令:sadd key value1 value2、srem key value1 value2(添加和删除)、smembers key(获取所有值)、sismember key value(查看是否有某个值)、sdiff key1 key2、sinter key1 key2、sunion key1 key2(输出差集、交集、并集)、scard key(查看set的大小)、srandmember key(随机产生一个值)、sdiffstore destinationkey key1 key2、sinterstore destinationkey key1 key2、sunionstore destinationkey key1 key2(将集运算结果装入目的key set中)

5、sortedset类型

相当于一个有排序功能的hashset,这个权重由用户指定。

底层:跳表或ziplist

用途:需要排序的场合,比方说学生按成绩排名,粉丝按关注时间排名等,各种排行榜。

常用命令:zadd key score1 member1 score2 member2(添加)、zcard key(查看set的大小)、score key member(获取对应权重)、zrem key member(删除)、zrange key 0 -1(查询所有。如果要加上权重就在后面加上withscores)、zremrangebyrank key start end(根据排名删除)、zremrangebyscore key start end(根据分数删除)、zrangebyscore key start end limit a b(根据分数查询分页)、zcount key min max(根据对应分数查看个数)、zrank key member(返回排名)

上一篇:django常用模板语言


下一篇:Redis过期策略及实现原理