• ❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者
  • 个人主页 :https://blog.csdn.net/qq_52007481
  • 个人社区:【小鱼干爱编程】

文章目录

  • Redis
    • Redis键(key)
    • 数据库相关操作
    • Redis字符串(String)
      • 字符串的常用命令
      • 字符串的数据结构
    • Redis列表(List)
      • 列表常用命令
      • 列表的数据结构
    • Redis 集合(Set)
      • 集合的常用命令
      • 集合的数据结构
    • Redis 哈希(Hash)
      • 哈希的常用命令
      • 哈希数据结构
    • Redis有序集合Zset
      • 有序集合的常用命令

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 100set k2 200set k3 300


get key 取值

get k1

append key value 在原有得值后面追加新的内容

# 在键为text的值的后面添加worldappend text world

setnx key value 只有在键不存在的时候可以设置值,能够避免覆盖的情况

incr key 对于整数,会自增1
decr key 对于整数 会减1
对k1自增或者自减

设置自增或自减步长
incrby key increment
decrby key increment

# 设置k1的值自增100incrby 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秒 值为v1setex 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 2lrem k4 3 2lrange k4 0 -1

  • lset key index value 将列表key下标为index的值替换成value
lpush k5 1 2 3 4 5# 将索引为2的值替换成22lset k5 2 22# 将索引为3的值替换成44lset 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 5sismember s2 2  # 返回1sismember s2 6  # 返回0
  • scard key 返回集合的个数
scard s2

  • srem key value1 value2 ... 删除集合中的某些元素
sadd s3 1 2 3 4 5 6 7 8srem 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 3sadd 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 返回有序集中,成员的分数值