redis基本类型
- string
- list
- hash
- set
- sorted set
在redis中,都是以key-value方式存储数据。在key中,除了保存key的字符串以外,还保存了value的type(是哪种基本类型)、实际值的类型(是数字还是字符串)。这样做的好处是,每次命令,不需要拿到value之后才能判断这个命令是否正确(例如对字符串进行了自增命令)
另外在redis中维护了正反索引,所以在选取范围的时候,开始下标设置为0,结束设置为-1,就是取全部数据。结束设置为-2,就是取从开始到倒数第二个数据。
help @类型,可以看到该类型的命令与解释
help 命令,可以看到该命令的解释
redis二进制安全,客户端从redis从拿到的是字节流,而不是字符流。只要保证set客户端和get客户端的编码格式一致,就不会出现乱数据
String
string类型分为三类:字符串、数值、bitmap
字符串
基础命令为:
- set ,设置key 和value
- get,获取key的vAlue
- append,往key的value后追加字符串
- setrange,设置key的第几位为value
- getrange,获得key的value的开始下标到结束下表的字符串
- strlen,获得key的value的长度
- mset
- mget
- msetnx,没有才设置
数值
特殊的命令为:
- incr,对数值类型的value+1
- incrby,对key增加指定值
- incrbyfloat,对key增加浮点数
object encoding key 可以看实际值的类型是字符串还是数字
bitmap
bitmap是按位进行保存字符串。一个字符即8位,每位上都是0或1。该类型进行与、或操作特别快。并且在特定场景下可以非常夸张的节省空间!比如按记录用户的一年内登录状态,只需要366位就可以记录这个用户每天的登录情况。
- setbit,设置第几位的值
- getbit
- bitcount,有几位是1
- bit and/or destKey key [key],位操作。
list
list类型是有序的列表,类似与链表。操作大致分为,从左边或者右边insert、从左边或者右边pop、获取list中第几个等等。比较特殊的是list取值的时候可以阻塞住,一直到取到值为止
基础命令为:
- lpush key value,从左边插入
- rpush key value,从右边插入
- lrange key start top,从左边开始获取几个
- llen key, list大小
- ltrim key start stop,保留范围内的内容
- lpop key,从左获取第一个VALUE
- rpop key
- blpop key expiretime
hash
hash就是redis中的map类型。没什么特殊
基础命令:
- hset key field value
- hget key field
- hgetall
- hkeys
- hscan cursor ,按下标输出
set
无序不能重复。比较特殊的是当用srandmember key 正数,返回的是不重复的几个值,没有就为空,如果是负数,则返回的是可以重复的值,没有也会填充。
- sadd key value [value]
- scard key 获得集合key内总数
- sdiff k1 k2,取k1中不在K2中的元素
- smembers key, 获得key的所有元素
- spop key [count],弹出count个随机元素
- srandmember key [count],随机取count个元素。count为正数,取不重复的。为负数,可取重复的
- sunion k1 k2,取K1 k2的交集
可用来抽奖
sorted-set
有序的set。并且每个值有权重的属性,可以按权重大小输出。并且有降序的命令。也有可以阻塞的命令。
sorted-set取值非常快,是因为底层用了跳表的数据格式。
跳表:
1.有一个按顺序的链表。
2.每一个元素,都随机确定是否要向上浮动。最后形成一个二维链表。
3.查找的时候,就用最高层的来查找。找到上一个值比当前值小,下一个值比当前值大的时候,向下一级继续进行搜索