Redis 数据类型与命令使用

Redis 命令不区分大小写,存入 Redis 的 key 值区分大小写。

Redis 中所有 key-value 都储存在 Redis-Object 中,Redis-Object 主要信息有:

  • 数据类型(type)
    • String (字符串)
    • Hash (散列表)
    • List (有序可重复集合)
    • Set (无序不可重复集合)
    • Sorted Set (有序不可重复集合,简称zset)
    • Bitmap (位图)
    • HyperLogLog (统计)
    • GEO (地理)
  • 编码方式(encoding)
    • raw
    • int
    • ht
    • zipmap
    • linkedlist
    • ziplist
    • intset
  • 数据指针(ptr)

  • 虚拟内存(vm)

  • …………..

 

一、Redis 基础命令

# 测试链接是否 OK(PONG 为成功)
ping

# 输出 redis
echo redis

# 退出客户端
quit

# 持久化到本地
save
bgsave

# 查看当前键空间中数据量
dbsize

# 切换键空间,默认为 0
select 0

# 数据移动
move key db

# 清除当前键空间数据(info 中的 Keyspace)
flushdb

# 清除所有键空间数据
flushall

# 密码认证
auth 密码

# 查看帮助命令
help @list
help @string
help @set
help @zset
help @hash
help @generic

# 查看版本信息
# 在外部
redis-server -v
# 已连上 Redis,查看系统信息(Keyspace 显示每个键空间中的数据数量)
info

 

二、Redis Key 通用命令

# 添加字符串类型 a-abc
set a abc

# 添加哈希类型 a-abc
hset hsah hahaha zhangsan

# 删除 a-abc,返回 1 成功,0 失败
del a

# * 匹配任意数量的任意符号,? 配合-个任意符号,[] 匹配一个指定符号
# 查询所有,尽量避免使用,会锁住数据库,阻塞其它请求,可使用 scan 代替
keys *
# 查询所有以 it 开头
keys it*
# 查询所有以 hm 结尾
keys *hm
# 查询所有前面两个字符任意,后面以 hma 结尾
keys ??hm
# 查询所有以 user: 开头,最后一个字符任意
keys user:?
# 查询所有以 u 开头,以 er:1 结尾,中间包含一个字母,s 或 t
keys u[st]er:1

# 判断是否存在,返回 1 为存在,0 为不存在
exists a

# 设置 a 的生命周期为 10 秒
expire a 10
pexpire a 10
expireat a 10
pexpireat a 10

# 切换 key 从时效性转换为永久性
persist key

# 查看这条数据的生存时间,单位秒,返回 -1 为不过期,-2 表示 key 不存在
ttl a
pttl a

# 查看键 a 对应 value 的数据类型
type a

# 随机获取 key 的值
randomkey

# 重命名 key,把 a 命名为 b,会覆盖已存在的 key
rename a b

# 重命名 key,如果 b 存在会重命名失败
renamenx a b

# 对所有 key 排序
sort

 

三、数据操作命令

String

# 添加字符串类型 a-abc,成功返回 OK
set a abc

# 添加字符串类型 a-abc,存活时间 100秒
setex a 100 abc

# 添加字符串类型 a-abc,存活时间 10000 毫秒(10秒)
psetex a 10000 abc

# 获取指定下表字符串---(abc),闭合空间,包前后边界
getrange a 0 2

# 设置新值,返回旧值---(abc)
getset a zxc

# 设置多个值 a-abc,z-zxc
mset a abc z zxc

# 获取多个值
mget a z

# 添加字符串类型 a-abc,键 a 存在会设置失败
setnx a abc

# 添加字符串类型 a-abc,其中一个 key 存在就会全部设置失败(有原子性)
msetnx a abc z zxc

# 获取字符串长度---(3)
strlen a

# key 对应 value 为数值,value 会加一
set s 21
incr s

# key 对应 value 为数值,value 会加制定数量
set s 21
incrby s 100

# 同上为减操作
decr
decrby

# 在 key 对应 value 的末尾添加字符串,会返回添加后的字符串
append a xyz

 

Hash

# 给 key 为 map 的键值设置键为 name 值为 jim
hset map name jim
hset map age 18

# 年龄加一
hincrby map age 1

# 判断 key 对应 value 是否有存在的 key,有返回 1,无返回 0
hexisit map name

# 获取 key 对应 value 中的 key 对应的值,不存在返回 nil
hget map name

# 获取 key 对应 value 中的所有键值对
hgetall map

# 获取 key 对应 value 中的所有 key
hkeys map

# 获取 key 对应 value 中的所有 value
hvals map

# 获取 key 对应 value 中的键值对数量
hlen map

# 获取多个
hmget map name age

# 设置多个
hmset map sex nan phone 1234568798

# 删除 key 对应 value 中的键值对
hdel map phone sex

# 若 map 中存在 name 会添加失败
hsetnx map name newjim

 

List

# 向列表左边添加元素
lpush list 1 2 3 4 5 6 7 8 9 10

# 向列表右边添加元素
rpush list 1 2 3 4 5 6 7 8 9 10

# 获取长度
llen list

# 查看列表,栈("10" "9" " 8"),0 -1 可以查看全部
lrange list 0 2

# 设置指定下标元素 (10->100)
lset list 0 100

# 获取指定下标元素 ("5")
lindex list 5

# 移除第一个元素,并返回(100)
lpop list

# 移除最后一个元素,并返回(1)
rpop list

 

Set,Hash 实现,复杂度 O(1)

# 添加
sadd set a b c d
# 会失败,set 是不可重复集合
sadd set a

# 获取集合长度 4
scard set

# 获取集合中所有元素
smembers set

# 随机获取指定个数的元素,不会删除元素
srandmember set 2

# 判断元素是否在集合中,返回 1 是,返回 0 不是
sismember set a

# 移除指定元素
srem set a b

# 从集合中随机弹出一个元素,元素不删除
srandmember set

# 从集合中随机弹出一个元素,出一个删一个
spop set

# 获取差集
sadd set1 c d e f
# ("b" "a")
sdiff set set1
# ("f" "e")
sdiff set1 set

# 获取交集 ("c" "d")
sadd set1 c d e f
sinter set set1

# 获取并集 ("d" "f" "b" "a" "c" "e")
sadd set1 c d e f
sunion set set1

 

Sorted Set,通过分数保证顺序,Hash 实现,复杂度 O(1)

# 添加
zadd sortedset 100 a 200 b 300 c

# 删除
zrem sortedset  a

# 按照排名范围删除元素
zremrangebyrank sortedset 0 220

# 元素个数---(3)
zcard sortedset

# 获得指定分数范围内的元素个数---(2)
zcount sortedset 0 220

# 获取元素分数---(100)
zscore sortedset a

# 查看分数区间的元素个数---(2)
zcount sortedset 0 220

# 获取元素排名,从小到大
zrank sortedset a ---(0)
zrank sortedset b ---(1)
zrank sortedset c ---(2)

# 获取元素排名,从大到小
zrevrank sortedset a ---(2)

# 增加元素分数
zincrby sortedset 1000 a

# 按照元素分数从小到大的顺序 返回索引从 start 到 stop 之间的所有元素---("b" "c" "a")
zrange sortedset 0 10

# 同上,会带上分数---("b" 200 "c" 300 "a" 1100)
zrange sortedset 0 10 withscores

# 获取指定分数范围的元素
zrangebyscore sortedset 0 220 [WITHSCORES] [LIMIT offset count]

 

BitMaps

可以应用于信息状态统计

# 设置第 888 位为 1,之前位上的数据会都补成 0
setbit bits 888 1

# 获取指定位上的值,不存在会返回 0
getbit bits 888 1

# 对指定key按位进行交并、非异或操作,并将结果保存到 destKey 中
# 位运算:and:交、or:并、not:非、xor:异或
bitop op destKey key1 [key2...]

# 统计指定 key 中 1 的数量
bitcount key [start end]

 

HyperLogLog

统计不重复数据的数量(基数统计,基数是数据集去重后元素个数)

HyperLogLog 是用来做基数统计的,运用了 LogLog 的算法

# 添加数据
# pfadd key element[element...]
pfadd hll 001
pfadd hll 001
pfadd hll 002
pfadd hll 003

# 统计数据
# pfcount key [key...]
pfcount hll

# 合并数据
# pfmerge destkey sourcekey [sourcekey...]

用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据

核心是基数估算算法,最终数值存在一定误差

误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值

耗空间极小,每个 hyperloglog key 占用了 12K 的内存用于标记基数

pfadd 命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大

Pfmerge 命令合并后占用的存储空间为 12K,无论合并之前数据量多少

 

GEO

地理信息,计算两点之间距离(直线水平距离,没有高度概念)

# 添加坐标点
# geoadd key longitude latitude member[longitude latitude member...]
geoadd zhongguo 1 1 beijing
geoadd zhongguo 2 2 shanghai
geoadd zhongguo 3 3 guangzhou
geoadd zhongguo 4 4 shengzhen

# 获取坐标点
# geopos key member(member...]

# 计算坐标点距离
# geodist key member1 member2 [unit]
geodist zhongguo beijing shanghai km


# 根据坐标求范围内的数据
# georadius key longitude lati tude radius m|km|ft|mi [withoord] [withdist] [withhash] [count count]
georadius zhongguo 1.5 1.5 88 km

# 根据点求范围内数据
# georadiusbymember key member radius m|km|ft|mi [withoord] [withdist] [withhash] [count count]
georadiusbymember zhongguo 2,2 130 km

# 获取指定点对应的坐标 hash 值
# geohash key member [member...]

位置非精确计算

 


https://redis.io/topics/data-types-intro

posted @ 2019-12-03 14:22  江湖小小白  阅读(338)  评论(0编辑  收藏  举报