一、热身
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中数据类型。