全局命令与String

2019-08-05  本文已影响0人  Robin92

全局命令

keys *      // 遍历所有键, 线上一定要禁用, 有可能阻塞其他操作, O(n), 成功返回 OK
dbsize      // 键总数, 直接读取 db 中存的一个变量, O(1)
exists key  // 检查键是否存在, 存在返回 1, 不存在返回 0
del key [key ...]    // 删除键, 返回删除成功的键的个数
expire key seconds   // 添加过期时间
ttl key        // 返回键的剩余过期时长. >= 0 为过期时长, -1 表示没有过期时间, -2 表示 键不存在
type key       // 返回数据结构类型, 如 string, list 等, 若 键不存在返回 none
object encoding key // 查询内部编码, 如: string 的内部编码可能是 int 或 embstr。(只有 int 才可以用 incr/incrby 命令)

数据结构和内部实现

数据结构与对应的内部编码 关系如下:

redis 可以在 节省内存 与 节省性能 之间选择合适的内部编码使用

数据库管理命令

select dbIndex // redis 用数字作 db 名, 默认 16 个库, 0 ~ 15
flushdb/flushall // 清除 db, 前者清除当前库, 后者消除所有库

不建议使用一个 redis 实例切换 db 存储数据的方式, 在 3.0 版本中已弱化了这个功能,分布式的 cluster 上只允许使用 0 号数据库,只不过向下兼容仍然支持。 建议在一台机器上部署多个 redis 实例, 用不同端口做区分,原因如下:

String 命令

(操作的类型又分 int, string, bitmap)

其他数据结构都是在字符串类型的基础上构建的, 它甚至可以存二进制数据 (如图片, 音频, 视频), 最大值不可超过 512 MB

set key value [ex seconds] [px milliseconds] [nx/xx]
setex key seconds value
setnx key value
get key

获取值, 若 key 不存在, 返回 nil

mset key value [key value ...]

批量设置值

mget key [key ...]

批量获取值, 按照 key 的顺序返回, 若不存在的 key 对应为 nil

TIP: 能用 mget 就不要用 get * n 次, 因为一次 get 在 发送命令, 执行 get, 返回结果上都有花费时间, 而 mget 发送命令一次, 执行 n 次 get, 返回结果一次, 所以所花的网络时间 (发送命令, 返回结果) 少了很多

incr key

自增操作, 若不是整数, 返回错误, 是整数返回自增后结果, 若键不存在, 返回 1
另有类似的 decr (自减), incrby (自增指定的数值), decrby (自减指定数值), incrbyfloat (自增浮点数)

append key value

字符串尾部追加值 (拼接)

strlen key

计算字符串值长度 (中文占 3 个字节)

getset key value

设置并返回原值 (set 命令返回改后的值), 原来无 key 返回 nil(相当于先 get 再 set)

setrange key offset value

设置指定字符位置 (替换) (??? 只是字符操作还是字符串操作)

getrange key start end

获取部分字符串, 偏移量从 0 开始

String 使用场景

上一篇下一篇

猜你喜欢

热点阅读