文章目录
注意:
对于redis存储的同一个区域,所有类型的key存储在一起,不能重复,在获取的时候使用对应类型的方法获取
数值类型不能超过MAX_LONG
一、String类型
方法 | 说明 |
---|---|
set key value | 设置一个string key |
get key | 获取key值 |
del key | 删除对应的key值 |
mset key1 value1 key2 value... | 设置多个键值对 |
mget key1 key2 | 获取多个值 |
strlen key | 获取值的长度 |
append key | 追加到原始值后面,如果不存在就新建 |
string类型的扩展操作
方法 | 说明 |
---|---|
incr key | 对于数值+1 |
incrby key incrment | 增加incrment 值 |
incrbyfloat key incrment | 增加指定的小数 |
decr | |
decrby |
设置指定的生命周期
方法 | 说明 |
---|---|
setex key seconds value | 设置指定的生存秒数 |
psetex key milliseconds value | 毫秒数 |
二、hash
方法 | 说明 |
---|---|
hset key field value | 设置值 |
hget key field | 获取值 |
hgetall key | 获取该key的所有field与value |
hdel key field1 [field2...] | 删除 |
hmset key field1 value1 field2 value2 | 添加多个值 |
hmget key field1 field2 | 获取 |
hlen key | 获取字段数量 |
hexists key field | 看是否存在字段 |
hash扩展操作
方法 | 说明 |
---|---|
hkeys | 获取keys |
hvals | 获取value |
hincrby key field incrment | |
hincrbyfloat key field incrment |
三、list
list是双向链表
方法 | 说明 |
---|---|
lpush key value1 value2... | 左添加 |
rpush key value1 value2... | 右添加 |
lrange key start stop | 获取范围内的数据 |
lindex key index | 索引 |
llen key | 长度 |
lpop | 获取并移除 |
rpop | |
blpop key [key2] timeout | 没值等timeout,有直接pop |
brpop key [key2] timeout |
四、set
方法 | 说明 |
---|---|
sadd key member1 [member2] | 添加 |
smembers key | 获取全部数据 |
srem key member1 member2 ... | 删除 |
scard key | 获取集合数据总量 |
sismember key member | 判断是否存在 |
srandmember key [count] | 随机获取集合的数据 |
spop key | 随机获取某个并移除 |
set扩展操作
方法 | 说明 |
---|---|
sinter key1 [key2] | 交 |
sunion key1 [key2] | 并 |
sdiff key1 [key2] | 差 |
sinterstore destination key1 [key2] | 求交并存储到目标 |
smove source destination member | 从原始集合中移动到目标集合 |
五、sorted_set
方法 | 说明 |
---|---|
zadd key scorel member1... | 添加一个或多个数据 |
zrange key start stop | 获取全部数据从小到大 |
zrevrange key start stop | 从大到小 |
zrem key member | 删除数据 |
zrangebyscore key min max | 获取值 |
zrevrangebyscore key max min | |
zremrangebyrank key start stop | 删除值 |
zremrangebyscore key min max | |
zcard key | 获取集合数量 |
zcount key min max | |
zinterstore destination numkeys key ... | numkeys个集合交并操作 |
zunionstore destination numkeys key ... | |
zrank key member | 获取数据对应的索引(排名) |
zrevrank key member | |
zscore key member | 获取score值 |
zincrby key increment member | 修改 |
注意:
sorted_set在进行集合的交并操作的时候还可以对score的一系列数值进行操作
六、通用操作
key的操作
方法 | 说明 |
---|---|
del key | 删除 |
exists key | 是否存在 |
type key | 获取key类型 |
keys pattern |
key设置有效期
方法 | 说明 |
---|---|
expire key seconds | 设置有效期 |
pexpire key milliseconds | |
expireat key timestamp | |
pexpireat key milliseconds-timestamp | |
ttl key | 获取有效期 |
pttl key | |
persist key | 设置为永久有效 |
注意:
ttl获取有效期的时候,如果key存在返回-1;如果key不存在返回-2;如果key在有效期返回有效期时间
key的其他操作
方法 | 说明 |
---|---|
rename key newkey | 会覆盖已存在名的值 |
renamenx key newkey | 如果改名不存在改名成功 |
sort | 排序的集合需要有数据且不改变原数据 |
help @generic |
数据库通用操作
方法 | 说明 |
---|---|
select num | 选择数据库 |
move key db | 移动数据到指定数据库 |
dbsize | 看数据库有多少key |
flushdb | 清理当前数据库的key |
flushall | 有生之年不用 |
七、持久化技术
rdb
- dbfilename dump.rdb
- 说明:设置本地数据库文件名,默认值为 dump.rdlb
- 经验:通常设置为dump-端口号.rdb
- dir
- 说明:设置存储.rdb文件的路径
- 经验:通常设置成存储空间较大的目录中,目录名称data
- rdbcompression yes
- 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
- 经验:通常默认为开启状态,如果设置为no,可以节省 CPU 运行时间,但会使存储的文件变大(巨大)
- rdbchecksum yes
- 说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行
- 经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险
- bgsave
- 后台执行,但不是立即执行
- save seconds changes
- seconds时间内改变了changes就开始存储
rdb特殊启动形式
-
服务器运行过程中重启
- debug reload
-
关闭服务器时指定保存数据
- shutdow save
aof
AOF写数据三种策略(appendfsync)
- always(每次)
每次写入操作均同步到AOF文件中,数据零误差,性能较低 - everysec(每秒)
每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高
在系统突然宕机的情况下丢失1秒内的数据 - no(系统控制)
由操作系统控制每次同步到AOF文件的周期,整体过程不可控
AOF功能开启
- 配置
- appendonly yes l no
- 作用
是否开启AOF持久化功能,默认为不开启状态
- 配置
- appendfsyne always l everysec l no
- 作用
AOF写数据策略
AOF重写方式
-
手动重写
bgrewriteaof -
自动重写
-
auto-aof-rewrite-min-size size
大于size基础大小就开始重写
-
auto-aof-rewrite-percentage percentage
大于这个百分比就开始重写
-
八、事务的基本操作
-
开启事务
- multi
作用
设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中
- multi
-
执行事务
- exec
作用
设定事务的结束位置,同时执行事务。与multi成对出现,成对使用
- exec
-
取消事务
- discard
作用
终止当前事务的定义,发生在multi之后,exec之前
- discard
注意:
如果在一系列的事务之中语句格式错误,整个事务都不能使用。
如果出现了语句格式没有问题但无法正确执行,那么只有当前语句不能执行,其他的可以正常执行
锁
- 对key 添加监视锁,在执行exec前如果key发生了变化,终止事务执行
watch key1 [key2…] - 取消对所有 key 的监视
unwatch
当监视的key发生了变化,所有的事务都不能执行
分布式锁(以上锁已经不适用了)
-
使用 setnx 设置一个公共锁
setnx lock-key value -
利用setnx命令的返回值特征,有值则返回设置失败,无值则返回设置成功
- 对于返回设置成功的,拥有控制权,进行下一步的具体业务操作
- 对于返回设置失败的,不具有控制权,排队或等待
- 操作完毕通过del操作释放锁
注意:
这个锁只是大家公认商量好的,也就是说即便加了锁,也可以修改对于的key值。
所以每次在修改之前都需要判断当前key是否加了锁,然后再进行下一步操作。
对应锁的名称似乎也不是与你要锁的key一一对应的,都是大家提前商量好的,其实就是相当于set了一个键值对,只不过这个键值对只能设置删除,不能修改
- 使用 expire 为锁key添加时间限定,到时不释放,放弃锁
- expire lock-key second
- pexpire lock-key milliseconds
九、删除策略
惰性删除
- 数据到达过期时间,不做处理。等下次访问该数据时
- 如果未过期,返回数据
- 发现已过期,删除,返回不存在
- 优点:节约CPU性能,发现必须删除的时候才删除
- 缺点:内存压力很大,出现长期占用内存的数据
定期删除
逐出算法
相关配置
- 最大可使用内存
- maxmemory
占用物理内存的比例,默认值为0,表示不限制。生产环境中根据需求设定,通常设置在50%以上。
- maxmemory
- 每次选取待删除数据的个数
- maxmemory-samples
选取数据时并不会全库扫描,导致严重的性能消耗,降低读写性能。因此采用随机获取数据的方式作为待检测删除数据
- maxmemory-samples
- 删除策略
- maxmemory-policy
达到最大内存后的,对被挑选出来的数据进行删除的策略 - 检测易失数据(可能会过期的数据集server.db[i].expires)
- volatile-lru:挑选最近最少使用的数据淘汰
- volatile-lfu:挑选最近使用次数最少的数据淘汰
- volatile-ttl:挑选将要过期的数据淘汰
- volatile-random:任意选择数据淘汰
- 检测全库数据(所有数据集server.db[i].dict)
- allkeys-lru:挑选最近最少使用的数据淘汰
- allkeys-lfu:挑选最近使用次数最少的数据淘汰
- allkeys-random:任意选择数据淘汰
- 放弃数据驱逐
- no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发错误OOM (Out Of Memory)
- maxmemory-policy
十、高级数据类型
Bitmaps类型的基础操作
-
获取指定key对应偏移量上的bit值
- getbit key offset
-
设置指定key对应偏移量上的bit值,value只能是1或0
- setbit key offset value
-
对指定key按位进行交、并、非、异或操作,并将结果保存到destkey中
- bitop Op destKey key1 [key2. . . ]
- and:交
- or:并
- not:非
- xor:异或
- bitop Op destKey key1 [key2. . . ]
-
统计指定key中1的数量
- bitcount key [start end]
HyperLogLog类型的基本操作
- 添加数据
pfadd key element [element …] - 統计数据
pfcount key [key …] - 合并数据
pfmerge destkey sourcekey [sourcekey. …]
相关说明
- 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
- 核心是基数估算算法,最终数值存在一定误差
- 误差范围:基数估计的结果是一个带有0.81%标准错误的近似值
- 耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数
- pfadd命令不是一次性分配12K内存使用,会随着基数的增加內存逐渐增大
- Pfmerge命令合井后占用的存储空间为12K,无论合并之前数据量多少
GEO
-
添加坐标点
- geoadd key longitude latitude member [longitude latitude member…]
-
获取坐标点
- geopos key member [member …]
-
计算坐标点距离
- geodist key member1 [member2 funit]
-
根据坐标求范围内的数据
- georadius key longitude latitude radius m\ km\ ft \ mi
-
根据点求范国内数据
- georadiusbymember key member radius m\ km\ ft \ mi
-
获取指定点对应的坐标hash值
- geohash key member [member … ]