Skip to main content

数据类型

数据类型

字符串类型

Redis 中的字符串类型最大可存储 512MB。

/**
key 不存在,则新增:
set key value
*/
set mobile 19999999999

/*
获取:
get key
*/
get mobile

// key 已经存在,则修改
set mobile 18888888888

/*
删除:
del key
*/
del mobile

/*
key 不存在则新增, 存在则不修改:
setnx key value
*/
// name -> jason
setnx name jason
setnx name json1

/*
key 存在则修改,不存在则不新增:
set key value xx
*/
// age -> nil
set age 20 xx

/*
批量设置:
mset key1 value1 key2 value2 ...
*/
mset score 99 gender man

/**
批量获取:
mget key1 key2 ...
*/
mget name age score gender

/*
设置新值获取旧值:
getset key newValue
*/
// return 20, age -> 21
getset age 21

/*
给旧值追加数据:
append key value
*/
// age -> 2145
append age 45

/*
计算 key 对应 value 的长度:
strlen key
*/
// return 4
strlen age

/*
获取指定下标范围的值:
getrange key start end
*/
// return 214
getrange age 0 2

/*
从指定的位置修改数据:
setrange key offset value
*/
// age -> 21123
setrange age 2 123

set num 1
/*
incr key:
给指定 key 对应的 value 自增 1,
如果 key 不存在则会从0开始自增。
*/
// num -> 2
incr num

/*
decr key:
给指定 key 对应的 value 自减 1,
如果 key 不存在则会从0开始自减。
*/
// num -> 1
desc num

/*
incrby key number:
给指定 key 对应的 value 增加指定值,
如果 key 不存在则会从0开始增加。
*/
// num -> 6
incrby num 5

/*
decrby key number:
给指定 key 对应的 value 减少指定值,
如果 key 不存在则会从0开始减少。
*/
// num -> 1
decrby num 5

/*
incrbyfloat key value:
给指定 key 对应的 value 增加指定值,
如果 key 不存在则会从0开始增加。
*/
set height 1.0
// height -> 6.5
incrbyfloat height 5.5

哈希类型

哈希类型以 key-value 的形式存储,一系列键值对的集合。

/*
hset key field value:
如果字段不存在则新增,存在则修改
*/
hset user name mike
hset user age 20

/*
hget key field:
获取单个属性值
*/
hget user age

/*
hdel key field: 删除某个字段
del key: 删除整个对象
*/
hdel user age
del user

/*
hgetall key:
获取所有 field 和 value
*/
hgetall user

/*
hkeys key: 获取所有 field
hvals key: 获取所有 value
*/
hkeys user
hvals user

/*
hmset key field1 value1 field2 value2 ...
批量设置
*/
hmset user score 99 subject math

/*
hmset key field1 field2 ...
批量获取
*/
hmget user name age score subject

/*
hlen key:
返回 key 存储的 hash 表中有多少条数据
*/
hlen user

/*
hexists key field:
判断指定 key 存储的 hash 表中是否有指定的字段
若存在则返回 1,不存在则返回 0
*/
hexists user name
hexists user score

列表

/*
rpush key value1 value2 ...: 从右侧插入
lpush key value1 value2 ...: 从左侧插入
*/
// database -> mysql mongodb
rpush database mysql
rpush database mongodb
// database -> oracle mysql mongodb
lpush database oracle

/*
lrange key start end:
查询指定的范围,0 表示开始,-1 表示最后
*/
lrange database 0 1

/*
lindex key index:
查询指定索引
*/
lindex database 1

/*
lset key index value:
修改 index 对应的值为 value
*/
lset database 1 pgsql

/*
lpop key: 删除第一个元素
rpop key: 删除最后一个元素
*/
lpop database
rpop database

/*
lrem key count value: 删除指定个数的指定元素
count > 0:从表头开始向尾搜索,移除与 value 相等的元素,数量为 count
count < 0:从表尾开始向头搜索,移除与 value 相等的元素,数量为 count 的绝对值
count = 0:移除表中所有与 value 相等的值
*/
lrem database 0 mysql

/*
ltrim database start end:
按照索引表剪切列表
*/
ltrim database 0 2

/*
linsert key before | after oldValue newValue:
在 oldValue 之前或之后查询 newValue
*/
linsert database after pgsql sql_server

// llen key:获取列表长度
llen database

无序集合

  1. 集合元素无序。
  2. 集合元素唯一。
/*
sadd key value1 value2 ...:
添加元素
key不存在就新增,存在就追加
追加的元素不存在就追加,追加的元素存在自动忽略
*/
sadd students mike joyce jason crystal

/*
smembers key: 列出集合元素
scard key: 获取集合元素个数
srandmember key count: 返回集合中任意 count 个元素
sismember key value: 判断集合中是否有指定元素, 存在返回 1,否则返回 0
*/
smembers students
scard students
srandmember students 1
sismember students jason

/**
spop key [count]: 随机删除 [count = 1] 个元素
srem key value: 删除指定的元素
*/
spop students 1
srem students mike

sadd user1 a b c d
sadd user2 c d e
/*
sdiff key1 key2 ...:
差集,差集是有顺序的, 不同顺序结果不同
sdiff key1 key2:key1 有的,key2 没有
sdiff key2 key1:key2 有的,key1 没有

sdiffstore key key1 key2 ...:
将结果保存为新的集合
*/
sdiff user1 user2 // a b
sdiff user2 user1 // e
sdiffstore user3 user1 user2

/*
sinter key1 key2 ...: 交集
sinterstore key key1 key2: 保存为新的集合
*/
sinter user1 user2
sinterstore user3 user1 user2

/*
sunion key1 key1 ...: 并集
sunionstore key key1 key2 ...: 保存为新的集合
*/
sunion user1 user2
sunionstore user3 user1 user2

/*
smove key1 key2 value: 移动元素
将 key1 中的 value 移动到 key2
*/
smove user1 user2 a

// 搜索
/*
sscan key cursor [match PATTERN] [count COUNT]:
从 第 cursor 位置开始,搜索满足 pattern 个元素
*/
sscan user1 0 match *

有序集合

  1. 元素不重复。
  2. 元素是字符串。
  3. 有序集合的元素(索引/分数)。

有序集合的排序取决于分数而非索引。

/*
zadd key weight1 value1 weight2 value2 ...:
新增元素
*/
zadd stu 80 mike 77 joe 92 rose 81 crystal

/*
zrange key start end: 查询指定范围内的元素
zcard key: 查询集合元素个数
zrangebyscore key min max: 查询指定权重范围的元素
zscore key member: 查询指定元素的权重
zcount key min max: 查询指定权重范围内的元素个数
zrank key member
*/
zrange stu 0 -1
zcard stu
zrangebyscore stu 75 81
zscore stu joe
zcount stu 75 81
zrank stu rose

/*
zincrby key increment member: 给元素增加权重
*/
zincrby stu 5 mike

/*
zrem key member: 移除元素
zremrangebyrank key start end: 移除指定排名范围内的元素
zremrangebyscore key min max: 移除指定权重内的元素
*/
zrem stu crystal
zremrangebyrank stu 1 2
zremrangebyscore stu 80 85

/*
zrevrange key start end: 从高到低排序(按索引)
zrevrank key member: 分数从高到低排序,指定元素的排名
zrevrangebyscore key max min: 按照指定范围的权重从高到低排列
*/
zrevrange stu 0 10
zrevrank stu mike
zrevrangebyscore stu 100 80

通用操作

// 获取当前库中所有的 key
keys *

// 清空当前数据库
flushdb

// 清空所有数据库
flushall

// 计算当前数据库的总数
dbsize

/*
type key:
查看 key 对应 value 的数据类型
*/
type height

/**
exists key:
判断 key 是否存在
*/
exists name

/*
expire key seconds:
设置 key 的过期时间
如果没有添加过期时间则添加,否则修改
*/
expire height 60

/*
ttl key:
查看 key 的过期时间
*/
ttl height

/*
persist key:
取消 key 的过期时间
如果 key 不存在或者被删除,则返回 0
如果 key 存在并且还未过期,,则返回 1
*/
persist height

发布订阅

Redis 通过发布订阅可在多个客户端之间进行通信:

subscribe channel

publish channel message

批量执行

multi
set name mike
set age 20
exec

设置密码

config get requirepass
config set requirepass 12345678
auth 12345678