Redis-02-常用数据类型及命令

说明

  • Redis-02-常用数据类型及命令
  • 假设你已经完成了上一节安装和常用配置
  • 官方文档:https://redis.io/documentation
  • Redis命令参考:http://redisdoc.com/

核心概念

》数据库命令

  • Redis解(刺)压(激)命令
    flushall    # 清空Redis服务器所有数据,使用需谨慎!!!
    flushdb     # 清空当前Redis库所有数据,使用需谨慎!!!
    
  • 常用命令
    select 1        # 切换到数据库1(默认0,可选0-15,也可以修改配置文件)
    dbsize          # 查看当前数据库k的数量
    keys *          # 查看当前数据库所有k
    exist k         # 查看k是否存在
    type k          # 查看k类型
    del k           # 删除k
    rename k k1     # 重命名k为k1
    remanenx k k1   # 重命名k为k1
    
    
  • 过期
    ttl k                       # 查看k过期时间
    expire k 10                 # 设置k过期时间为10秒
    expireat k 1355292000       # 设置k在固定时间过期
    persist k                   # 移除k的过期时间改为不过期
    pttl k                      # 查看k过期时间毫秒
    pexpire k 10                # 设置k过期时间为10毫秒
    pexpireat k 1555555555005   # 设置k在固定时间毫秒过期
    
    

》字符串String

  • 一个key对应一个value,二进制安全的,单个value最多512M
  • 常用命令
    set k v				# 设置k的值为v
    get k				# 获取k的值
    append k aa			# k的值后追加aa
    strlen k			# 获取k的值长度
    setnx k v			# 设置k的值为v(如果k不存在)
    incr k				# k的值(数字类型)++
    decr k				# k的值(数字类型)--
    incrby k 5			# k的值(数字类型)+5
    decrby k 5			# k的值(数字类型)-5
    mset k1 v1 k2 v2	# 设置多个k-v
    mget k1 k2			# 获取多个k的值
    msetnx k1 v1 k2 v2	# 设置多个k-v(如果都不存在)
    getrange k 0 3		# 获取k的值的第0~3个字符(全部:0 -1)
    setex k 60 v		# 设置值并且设置过期时间,单位秒
    getset k v			# 设置新值获取旧值
    
    

》队列List

  • list是一个双向链表,开头结尾效率高中间低
  • list数据存储形式
    • zipList:少量数据
    • QuickList:大量数据
  • 常用命令
    lpush/rpush k v1 v2 v3	# 向k左/右插入
    lpop/rpop k				# 从k左/右吐出一个值
    rpoplpush k1 k2			# k1右边一个值插入k2左边
    lrange k 0 -1			# 查看k的列表的所有值
    lindex k 3				# 获取k的索引3的值(左到右)
    llen k					# 获取k的列表长度
    linsert k befor v3 newv	# 在k的值为v3后面插入newv
    lrem k 3 vv				# 从k的左边删除3个值为vv的值
    lset k 3 v3				# 将k的索引为3的值替换为v3
    

》集合Set

  • 具备自动排重的list
  • Set是一个String类型的无序集合
  • 底层是一个value为null的hash表
  • 复杂度:O(1),数据增加查询速度不变
  • Set数据存储形式
    • dict字典,哈希表实现
  • 常用命令
    sadd k v1 v2	# 将v1、v2加入到集合k
    smembers k		# 取出k中所有值
    sismember k v 	# 判断k中是否有v
    scard k			# 返回k中元素个数
    srem k v2 v3	# 删除k中的值k2、k3
    spop k			# 从k中随机吐出一个值
    srandmember k 3	# 随机从k中取出3个值,不删除
    smove k1 k2 v	# 把v从集合k1移动到k2
    sinter k1 k2	# 返回k1、k2交集
    sunion k1 k2	# 返回k1、k2并集
    sdiff k1 k2		# 返回k1、k2差集
    
    

》哈希Hash

  • 是一个键值对集合,相当于:k = {“filed1”:“v1”,“filed2”:“v2”}
  • Hash数据存储形式
    • zipList:少量数据
    • QuickList:大量数据
  • 常用命令
    hset k f v			# 集合k中插入域f值为v
    hget k f			# 获取集合k中域f的值
    hmset k f1 v1 f2 v2	# 集合k中插入域f1值为v1、域f2值为v2
    hexists k f			# 判断集合k中域f是否存在
    hkeys k				# 列出集合k中所有的filed
    hvals k				# 列出集合k中所有的value
    hincrby k f 10		# 集合k中的域f增加10
    hsetnx k f v		# 集合k中域f值设置为v(如果f存在)
    

》有序集合Zset(sorted set)

  • 类似Set,没有重复元素的字符串集合
  • 每个元素绑定一个评分值:score,元素唯一但score可以重复
  • Zset数据存储形式
    • HashMap + 跳跃表
      • HashMap存储形式相当于:k = {“v1”:“score1”,“v2”:“score2”}
      • 跳跃表存储score,跳跃表查询效率远高于有序链表
  • 常用命令
    zadd k 1 v1 2 v2											# 向有序集k中插入v1、v2,score分别为1、2
    zrange k 0 -1 [withscores]									# 返回有序集k中下标0~-1之间的元素
    zrangebyscore k 10 20 [withscores] [limit offset count]		# 返回有序集k中score介于10和20的元素,按score递增
    zrevrangebyscore k 10 20 [withscores] [limit offset count]	# 同上,按score递减
    zincrby k 10 v												# 为有序集k中的值v的score加10
    zrem k v													# 删除有序集k中值为v的元素
    zcount k 10 20												# 统计有序集k中score位于10~20的元素个数
    zrank k v													# 返回值k在有序集k中的排名,从0开始
    
    
上一篇:20 道 Redis 面试题,面试官能问的都被我整理了


下一篇:Redis单机版安装和使用