- ❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者
- ???? 个人主页 :https://blog.csdn.net/qq_52007481
- ⭐ 个人社区:【小鱼干爱编程】
文章目录
Redis
Redis键(key)
命令 | 作用 |
---|---|
keys * | 查看当前库所有key |
exists key | 判断某个键是否存在 |
type key | 查看key地数据类型 |
del key | 删除指定地key |
unlike key | 根据value选择非阻塞删除 仅将keys从keyspace元数据中删除,真正地删除会在后续异步操作 |
expire key 10 | 设置key地存活时间,单位秒 |
ttl key | 查看还有多少秒过期,-1表示用不过期,-2表示已过期 |
set key value | 添加键值对 |
数据库相关操作
命令 | 作用 |
---|---|
select 1 | 切换到数据库1 |
dbsize | 查看当前数据库地key |
flushdb | 清空当前库 |
flushall | 通杀全部库 |
redis一共有16个数据库,默认使用的是0号数据库
Redis字符串(String)
String是redis最基本的数据类型,
String类型是二进制安全的,Redis的string可以包含任何数据,如图片。序列化的对象
String 类型是Redis最基本的数据类型,一个Redis中字符value最多可以是512M
字符串的常用命令
set key value
添加键值对
# 清空数据库
flushdb
# 查看数据库中的键
keys *
#添加新数据
set k1 100
set k2 200
set k3 300
get key
取值
get k1
append key value
在原有得值后面追加新的内容
# 在键为text的值的后面添加world
append text world
setnx key value
只有在键不存在的时候可以设置值,能够避免覆盖的情况incr key
对于整数,会自增1decr key
对于整数 会减1
对k1自增或者自减
设置自增或自减步长incrby key increment
decrby key increment
# 设置k1的值自增100
incrby k1 100
mset key1 value1 key2 value2 ...
同时设置多个键值对mget key1 key2 ...
同时获取多个键值对
同时设置多个数据库中不存在的键值对,如果其中一个键存在,则所有的内容都不会被创建成功
msetnx key1 value1 key2 value2 …strlen key
获取字符串的长度getrange key start end
遍历输出
getrange name 0 -1
获取第一个字符第3个字符
getrange name 0 2
setrange key 开始位置 value
用新的值覆盖旧值
setex key 过期时间 value
设置值得同时设置过期时间,单位为秒
# 过期时间20秒 值为v1
setex k5 20 v1
获取旧得值填充新的值
getset key value
getset k1 33
字符串的数据结构
String的数据结构为简单动态字符串(Simple Dynamic String)是可以修改的字符串,内部的实现结构和python中的list
类似,都是先预先分配一些空间,当空间不够用会自动扩充空间的大小,最大长度为512M
Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加应给元素到表头或者尾
它的底部实际是个双向链表,对两端的操作性性能很高,通过索引下标的操作中间节点的性能较差。
列表常用命令
-
lpush/rpush key value1 value2 value3
从左边/右边插入一个或者多个值 -
lpop/rpop key
从左边/右边弹出一个值 值在键在,键光键亡 -
rpoplpush key1 key2
从key1列表右边弹出一个值,插入到key2列表的左边 -
lrange key start stop
按照索引下标获得元素(从左到右)
代码演示
-
lindex key index
按照索引下标获得元素 -
llen key
获取列表的长度 -
linsert key before value newvalue
在value的前面插入newvalue
在3的前面插入99
linsert k1 before 3 99
在99的后面插入55
linsert k1 after 99 55
-
lrem key n value
从左边删除n个value(删除重复值)
删除k4列表中左面3个2
lpush k4 1 2 2 3 2 1 5 2
lrem k4 3 2
lrange k4 0 -1
-
lset key index value
将列表key下标为index的值替换成value
lpush k5 1 2 3 4 5
# 将索引为2的值替换成22
lset k5 2 22
# 将索引为3的值替换成44
lset k5 3 44
列表的数据结构
list的数据结构是快速链表
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist压缩列表,所有的元素在一块连续的内存空间
元素较多时,才会改成quicklist,
quicklist是将多个ziplist用双向链表的形式链接起来的数据结构
Redis 集合(Set)
是一个无序不重复的序列,集合成员是唯一的
操作类似于list
底层是一个value为null的hash表,添加,删除,查找的复杂度都是O(1)
集合的常用命令
-
sadd key value1 value2 ...
将元素添加到集合key中,如果新添加的元素已经在集合中存在,则会被忽略
# 向s1集合中添加元素
sadd s1 1 2 3 4 4 4
-
smembers key
取出该集合的所有值
# 查看s1中的集合
smembers s1
-
sismember key value
判断集合中是否存在该值 有返回1 没有返回0
sadd s2 1 2 3 4 5
sismember s2 2 # 返回1
sismember s2 6 # 返回0
-
scard key
返回集合的个数
scard s2
-
srem key value1 value2 ...
删除集合中的某些元素
sadd s3 1 2 3 4 5 6 7 8
srem s3 3 4 7 # 删除成功
srem s3 3 # 当删除的元素不存在时,返回0,不会报错
-
spop key [count]
随机弹出一个元素,或者多个元素
spop s3 # 随机弹出一个元素
spop s3 2 # 随机弹出2个元素
-
srandmember key [count]
随机从该集合中取出n个值,不会从集合中删除,默认n为1,当n大于集合的长度时,返回集合中的所有元素
srandmember s3 # 随机取出一个值
srandmember s3 2 # 随机取出2个值
-
smove source destination value
将一个值从一个集合移动到另一个集合
sadd s4 1 2 3
sadd s5 6 7 8
# s4中的2移动到s5中
smove s4 s5 2
redis中的集合和数学中的集合一样也有交集并集差集的计算方式
-
sinter key1 key2
返回两个集合的交集 -
sunion key1 key2
返回两个集合的并集 -
sdiff key1 key2
返回两个集合的差集
实例
集合的数据结构
集合的数据结构dict字典,字典是使用哈希表实现的,所有的的value值都指向同一个外部值
Redis 哈希(Hash)
Redis hash 是一个键值对集合,是string类型和field和value的映射表,hash适合存储对象
哈希的常用命令
-
hset key field value
将哈希表 key 中的字段 field 的值设为 value 。 -
hget key field
获取在哈希表中指定 key 的所有字段和值 -
hmset key field1 value1 field2 value2
同时将多个 field-value (域-值)对设置到哈希表 key 中。 -
hmget key field1 field2
获取所有给定字段的值 -
hexists key filed
查看哈希表 key 中,指定的字段是否存在。 -
hkeys key
获取所有哈希表中的字段 -
hvals key
获取哈希表中所有值。 -
hsetnx key field value
只有在字段 field 不存在时,设置哈希表字段的值。
hlen key 获取哈希表中字段的数量 -
hincrby key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment -
hincrbyfloat key field increment
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 -
hdel key field1 [field2]
删除一个或多个哈希表字段
哈希数据结构
Hash类型对应的数据结构是两种,ziplist(压缩列表),hashtable(哈希表)
field-value长度短且个数较少时,使用的是ziplist,否则使用的是hashtable
Redis有序集合Zset
有序集合和普通集合非常相似,都是没有重复元素的序列,区别在于,有序集合的每一个元素都关联了一个评分(score) 这个评分被用来按照最低分到最高分的方式排序有序集合中的元素,
注意:集合中的元素是不可重复的,但是评分可以重复
有序集合的常用命令
-
zadd key key score1 value1 score2 value2 ...
将一个或者多个member元素以及score值加入到有序集合中 -
zrange key start stop
返回有序集合key中下标在start stop之间的元素,添加参数 withscores,连同分数和值返回到结果集 -
zrangebyscore key min max
返回有序集合中所有score 值介于min 和max之间包括min和max的成员 返回的结果是按score从小到大 -
zrevrangebyscore key min max
返回有序集合中所有score 值介于min 和max之间包括min和max的成员 返回的结果是按score从大到小 -
zcard key
获取有序集合的成员数 -
zcount key min max
计算在有序集合中指定区间分数的成员数 -
zincrby key increment member
有序集合中对指定成员的分数加上增量 increment -
zinterstore destination numkeys key [key ...]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中 -
zlexcount key min max
在有序集合中计算指定字典区间内成员数量 -
zrank key member
返回有序集合中指定成员的索引 -
zrem key member [member ...]
移除有序集合中的一个或多个成员 -
zremrangebyscore key min max
移除有序集合中给定的分数区间的所有成员 -
zscore key member
返回有序集中,成员的分数值