redis数据类型

一、热身

1.获取符合规则的键名列表

keys pattern

2.判断一个键是否存在

exists bar

3.删除键

del bar

4.获取键值的数据类型

type key


redis是使用redisObject(类型、编码方式、数据指针、虚拟内存、其他信息)来表示所有的key和value的、

二、字符串类型
内部编码有三种int(8 个字节的长整型(long,2^63-1))、embstr(小于等于44个字节的字符串,embstr格式的SDS(Simple Dynamic String))、raw(SDS大于 44 个字节的字符串)

1.set key value

   get key

    mset key1 val1 key2 val2设置多个键值

2.incr num当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1,当键值为整数时redis会提示错误。

incrby key 2增加指定的整数

decr key 减少指定的整数

incrbyfloat key increment增加指定的浮点数

append key value像值得尾部追加值

strlen key返回键值的长度,如果不存在返回0

3.位操作

getbit key offset

setbit key offset value

bitcount key [start] [end]

bitop operation destkey key1 [key2...]--对key1和key2等多个key进行位运算(and、or、xor、not),并将结果存储在destkey中

bitpos foo 1 获取第一个二进制位为1的偏移量

bitpos foo 1 1 2第二个到第三个字节之间出现的第一个值为1的二进制位的偏移量(从0开始算起,与从哪个字节开始无关)

三、散列类型

内部编码有两种:

ziplist(当哈希类型中元素个数小于 hash-max-ziplist-entries 配置(默认 512 个),同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现。)
hashtable:其他采用hashtable实现

1.一个散列类型可以包含2^32-1的字段

hset key field value

hget key field

hmset key field1 value1 field2 value2

hmget key field1 [field2]

hgetall key

2.判断字段是否存在

hexists key field

3.当字段不存在时赋值

hsetnx key field value--如果字段已存在,则该命令不执行任何操作

4.增加数字

hincrby key field increment

5.删除字段

hdel key field

6.只获取字段名或字段值

hkeys key

hvals key

四、列表类型

ziplist(同上)
linkedlist

1.列表类型可以存储一个有序的字符串列表(使用的是双向链表),最多可容纳2^32-1个元素

2.向列表两端添加元素

lpush key value [value]

rpush key value [value]

3.从列表两端弹出元素

lpop key

rpop key

4.获取列表中元素的个数

llen key

5.获取列表

lrange key start stop返回索引从start到stop的所有元素,包括两端元素

6.删除列表中指定的值

lrem key count value

7.获得/设置指定索引的元素值

lindex key index

lset key index value

8.只保留列表指定片段

ltrim key start end

9.向列表中插入元素

linsert key before/after pivot value---首先在列表中从左到右查找职位pivot的元素,然后根据第二个参数看是before还是after来决定将value插入到钙元素的前面还是后面。

10.将元素从一个列表转到另一个列表

rpoplpush source destination

五、集合类型

内部编码intset(当集合中的元素都是整数,并且集合中的元素个数小于 512 个时)、hashtable(其他采用这种方式)

1.集合类型在redis中是使用值为空的散列表实现的,时间复杂度为O(1)

2.增加/删除元素

sadd key member [member....]

srem letters c d

3.获取集合中的所有元素

smembers key

4.判断元素是否在集合中

sismember key member

5.集合间运算

sdiff key [key...]--多个集合间的差值运算

sinter key [key...]--多个集合间的交集运算

sunion key [key...]--多个集合间的并集运算

6.获取集合中的元素个数

scard key

7.进行集合运算并将结果存储

sdiffstore destination key [key...]

sinterstore destination key [key...]

sunionstore destination key [key...]

8.随机获得集合中的元素

srandmember key [count]

9.从集合中弹出一个元素

spop key

六、有序集合类型

内部编码:ziplist(当有序集合的元素个数小于 128 个(默认设置),同时每个元素的值都小于 64 字节(默认设置),Redis 会采用 ziplist 作为有序集合的内部实现)、skiplist

1.使用散列表和跳跃表实现

2.增加元素

zadd key score member [score member]

3.获得元素的分数

zscore key member

4.获得排名在某个范围的元素列表

zrange key start stop [withscores]

zrevrange key start stop [withscores]--按照元素从大到小的顺序给出结果

5.获得指定分数范围的元素

zrangebyscore key min max [withscores] [limit offset count]

6.增加某个元素的分数

zincby key increment member

7.获得集合中元素的数量

zcard key

8.获得指定分数范围内的元素个数

zcount key min max

9.删除一个或多个元素

zrem key member [member..]

10.按照排名范围删除元素

zremrangebyrank key start stop

11.获得元素排名(由小到大的排序)

zrank key member

12.计算有序集合的交集

zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]


今天面试被问到除了这五种基本类型之外,redis是否还有其它的类型,一脸懵逼了。今天特意看了一下,redis还有其他类型:bitmap、HyperLogLog(基数统计,记录一个大概的数字)、stream、geo这些类型,一共是9中数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值