参考
基本类型
redis 中的table
是以key
的形式存在的,key
可以分为五种类型
- string: 字符串
- hash: 哈希
- list: 列表
- set: 集合
- zset: 有序集合(sorted set)
后面又增加了
- bit arrays (或者说 simply bitmaps)
- 在 2.8.9 版本又添加了HyperLogLog
数据库
默认情况下 redis 提供了 16 个 db,即db0 - db15
# 修改数据库个数
$ vim redis.conf
databases 16
# 修改密码
$ vim redis.conf
requirepass 123456
连接 redis command line
# 语法
$ redis-cli [OPTIONS] [cmd [arg [arg ...]]]
# 查看帮助
$ redis-cli --help
# 默认连接 db0
# -h: ip/host
# -p: port
# -a: password
# --raw: 不显示字节码,以原生的方式显示
$ redis-cli -h rus-service -p 6379 -a 123456 --raw
# 检验是否成功连接
redis01:6379> ping
PONG
切换数据库
# 语法
redis01:6379> select index (0~15)
# 切换到 db1
redis01:6379> select 1
redis01:6379[1]>
清空数据(线上环境别用!)
# 删除当前数据库的所有 keys
redis01:6379> flushdb
# 删除所有数据库的所有 keys
redis01:6379> flushall
查看当前 db 下 keys 数量
# dbsize 和 `keys *` 统计的数量可能是不一样的,`keys *`统计的是当前 db
# 有效的 key,而 dbsize 统计的是所有未被销毁的 key。有效和未被销毁是不一
# 样的,具体可以了解 redis 的过期策略。`key *`在数据量特别大的正式环境严禁使用!
redis01:6379> dbsize
将当前 db 的 key 移动到指定 db
redis01:6379> move key dest_db
System config
# 获取所有配置
redis01:6379> config get *
# 获取指定配置,如:查看安装路径
redis01:6379> config get dir
# 修改指定配置
redis01:6379> config set [key] [value]
# 例如:修改日志等级
redis01:6379> config set logleve "notice"
# 查看 redis 系统信息,包含 Server、Clients、Memory、
# Persistence、 Stats、Replication、CPU、Cluster、
# Keyspace 等信息,其中 Keyspace 包含各个 db keys 数
# 量、expires 数量
redis01:6379> info
Key 操作
查看
# key 是否存在,返回 integer,即返回存在的数量
redis01:6379> exists key [key2...]
# 查看给定模式的 key(非正则)
# 时间复杂度为O(n),严禁在正式环境使用该命,因为 redis 是单线程的,执行该命令会直接影响 redis service 性能
# 建议使用 scan,分批次扫描 redis 虽然查询总时间变长,但不会导致 redis service 卡顿
# http://doc.redisfans.com/key/scan.html
redis01:6379> keys [pattern]
# 例如:查看所有的 key
redis01:6379> keys *
# 随机返回一个 db 中存在的 key
redis01:6379> randomkey
# 删除 key,返回 integer,即返回删除成功的数量
redis01:6379> del key [key1...]
# 随机返回一个 key
redis01:6379> randomkey
# 查看 key 类型,none 说明 key 不存在
redis01:6379> type "key_name"
设置 key 过期时间
# 设置 key 的过期时间,过期后 key 将变为不可用的,但并不会立即销毁
redis01:6379> expire key time_in_seconds
# 同 expire,但接收参数是 unix timestamp,到时间戳指定的时间就过期
redis01:6379> expireat key unix_timestamp
# 同 expireat,接收参数是毫秒的 unix timestamp
redis01:6379> pexpireat key milliseconds_unix_timestamp
# 移除过期时间,如果 key 不存在或者没有设置过期时间,返回0(失败)
redis01:6379> persist key
# 以毫秒为单位返回 key 的剩余过期时间
redis01:6379> pttl key
# 以秒为单位返回 key 的剩余过期时间(time to live)
redis01:6379> ttl key
修改
# 重命名 key,如果 newkey 存在则覆盖
redis01:6379> rename oldkey newkey
# 检测 newkey 是否存在,如果存在返回0(失败)
redis01:6379> renamenx oldkey newkey
# 序列化给定 key,并返回被序列化的值
redis01:6379> dump key
String
Hash
Hash 是<field, value>
的键值对的集合,这里用field
是为了和 rediskey
进行区分。
修改 Hash field
# 如果 field 不存在会先创建,否则直接修改该
redis01:6379> hset key field value
# 如果 hash field 已经存在,不做任何修改,返回0(失败)
redis01:6379> hsetnx key field value
# 设置多个 hash field 的值
redis01:6379> hmset key field1 value1 field2 value2 ...
# 递增某个 field 的值
redis01:6379> hincrby key field integer
获取 Hash
# 获取 hash 的某个 field 的值
redis01:6379> hget key field
# 获取 hash 多个 field 的值
redis01:6379> hmget key field1 field2 ...
# 获取 hash 所有 field
redis01:6379> hkeys key
# 获取 hash 所有 value
redis01:6379> hvals key
# 获取 hash 所有 field 和 value
redis01:6379> hgetall key
# 获取 hash field 的数量
redis01:6379> hlen key
# 查看 hash 特定的 field 是否存在
redis01:6379> hexists key field
删除 Hash field
# 删除 hash 特定的 field
redis01:6379> hdel key field
List
Set
ZSet
Bit Arrays
HyperLogLog
HyperLogLog主要解决大数据应用中的非精确计数(可能多也可能少,但是会在一个合理的范围)操作,它可以接受多个元素作为输入,并给出输入元素的基数估算值,基数指的是集合中不同元素的数量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 。 HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
关于这个数据类型的误差:在一个大小为12k的key所存储的hyperloglog集合基数计算的误差是%0.81.
统计
数据备份和恢复
数据备份
# 该命令将在 redis 安装目录中创建 dump.rdb 文件
redis01:6379> save
# 后台运行备份
redis01:6379> bgsave
数据恢复
# 查看 redis 安装目录
redis01:6379> config get dir
1) "dir"
2) "/usr/local/redis/bin"
# 将 dump.rdb 移动到 redis 安装目录,重启 redis 即可
mv dump.rdb /usr/local/redis/bin
DEBUG
# 查看指定 key RedisObject 信息
redis01:6379> debug object <key>
# 查看指定 key RedisObject 某个内部属性
redis01:6379> object <subcommand> arg arg ... arg. Subcommands are:
# 查看使用帮助
redis01:6379> object help
encoding <key> -- return the kind of internal representation used in order to store the value associated with a key.
freq <key> -- return the access frequency index of the key. the returned integer is proportional to the logarithm of the recent access frequency of the key.
idletime <key> -- return the idle time of the key, that is the approximated number of seconds elapsed since the last access to the key.
refcount <key> -- return the number of references of the value associated with the specified key.