说明

  • 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开始