常用命令
keys * 查看所有的键
get key 获取对应key的value
set key value 设置key、value
./redis-server 启动Redis服务(窗口启动)
./redis-server & 启动Redis服务(后台启动)
kill -9 PID 关闭Redis服务
save 保存(持久化到Redis中)不建议这么做
./redis-cli shutdown 关闭连接并保存
./redis-server —port 端口号 切换端口号
./redis-cli -p port 启动指定端口(port)
./redis-cli -p port shutdown 关闭指定端口(port)的连接
./redis-server ../redis.comf & 使用配置文件启动,后台启动(建议这种方式启动)
./redis-server ../redis.conf 指定配置文件启动
./redis-cli -p port -h ip 启动端口(port),连接指定地址(ip)的redis
./redis-cli -p port -a pass 启动端口(port),输入连接密码(pass)
monitor 查看redis日志
./redis-cli -p 端口号 -a 密码 如果redis存在密码时用该命令
redis.conf里设置requirepass 登陆redis的密码
Redis基础命令
info 查看系统信息
flushdb 清除当前space
flushall 清除所有space
dbsize 当前database的数量
quit 退出连接
Redis键命令
select number 切换命名空间(number从0开始)
del key 删除一个key
exists key 判断这个key是否存在
ttl key 查看key的剩余时间,单位是秒(返回-1表示没有过期时间,为-2说明已过期)
expire key time 设置key的过期时间(time)
type key 返回key的类型
hset key value 设置一个hash
randomkey 返回一个随机的key
rename oldkey newkey 重命名一个key
renamenx oldkey newkey 重命名并复制一个key,如果key存在则失败
String字符串
setex key 时间(秒) value set一个键的时候设置有效时间
psetex key 时间(毫秒) value
getrange key start end 获取字符串指定下标的所有值(时间复杂度:o(1))
setrange key index value 设置指定下标所有对应的值(时间复杂度:o(1))
setnx key value 只有当不存在这个key时才会set成功(时间复杂度:o(1))
set key value xx 只有当key存在时才会设置(时间复杂度:o(1))
msetnx key value key value 批量设置key,value,如果有一个key存在,则都失败。具有原子性
mset key value key value 一次设置多个key value,原子操作(时间复杂度:o(n))
mget key1 key2 key3 一次获取多个key的value,原子操作(时间复杂度:o(n))
getset key newvalue 先拿一个key,再set这个key的value。会返回旧的值
append key value 给这个key的value的末尾追加一个value
strlen key 返回这个key的value的长度(时间复杂度:o(1))
Integer数值
incr key 给key每次加1,必须是数值类型(如果key不存在,自增后get(key)=1,时间复杂度:o(1))
decr key 给key每次减1(如果key不存在,自减后get(key)=-1,时间复杂度:o(1))
incrby key 增量值 指定key增量多少(如果key不存在,自增后get(key)=增值量,时间复杂度:o(1))
decrby key 减少值 给指定key减少(如果key不存在,自减后get(key)=减少值,时间复杂度:o(1))
incrbyfloat key 增量值 指定key增量多少(如果key不存在,自增后get(key)=增值量(小数,3.5),时间复杂度:o(1))
Hash哈希
特点:
- Mapmap
- Small redis(redis本身是一个key value的非关系型数据库,Hash的value里又是一个key value的形式,所以称他为Small redis)
- field(属性)不能相同,value可以相同
hget key field 获取hash key对应的field的value(时间复杂度:o(1))
hset key field value 设置hash key对应的field的value(时间复杂度:o(1))
hdel key field1 field2 删除hash key对应的field的value(时间复杂度:o(1))
hgetall key 返回hash key对应所有的field和value
hexists key field 判断hash key的field是否存在,存在返回1(时间复杂度:o(1))
hkeys key 返回hash key对应所有field
hvals key 返回hash key对应所有field的value
hlen key 返回hash key field的数量(时间复杂度:o(1))
hmget key field1 field2 批量获取hash key的一批field对应的值
hmset key field1 value1 field2 value2 批量设置hash key的一批field value
hsetnx key field value 设置hash key对应faild的value,如果faild存在则失败(时间复杂度:o(1))
hincrby key faild intCount hash key对应的faild的value自增intCount(时间复杂度:o(1))
hincrbyfloat key faild floatCount hincrby浮点数版(时间复杂度:o(1))
List列表
lpush key values 从列表左端插入值(1-N个),时间复杂度(o(1~N))
rpush key value1 value2....valueN 从列表右端插入值(1-N个),时间复杂度(o(1~N))
linsert key before|after value newValue 在list指定的值前|后插入newValue,时间复杂度(o(n))
lpop key 从列表左侧弹出一个item,时间复杂度(o(1))
rpop key 从列表右侧弹出一个item,时间复杂度(o(1))
blpop key timeout lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞,时间复杂度(o(1))
brpop key timeout rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞,时间复杂度(o(1))
lrem key count value 根据count值,从列表中删除所有value相等的项,时间复杂度(o(n))
(1)count > 0,从左到右,删除最多count个value相等的项
(2)count < 0,从右到左,删除最多Math.abs(count)个value相等的项;注:Math.abs(count)如果参数是非负数,则返回该参数。如果参数是负数,则返回该参数的相反数
(3)count = 0,删除所有value相等的项
ltrim key start end 按照索引范围修剪列表,时间复杂度(o(n))
lrange key start end(包含end) 获取列表指定索引范围内的所有item,时间复杂度(o(n))
lindex key index 获取列表指定索引的
item,时间复杂度(o(n))
lset key index newValue 设置列表指定索引的值为newValue
llen key 获取列表长度,时间复杂度(o(1))
Tips:
1、假如说你想做一个类似站的功能,你可以使用:lpush + lpop = stack
2、假如说你想实现一个队列,你可以使用:lpush + rpop = queue,相当于实现了一个队列
3、如果你想控制一个有固定数量的列表,而不是让他无限制放大,你可以使用:lpush + ltrim = capped collection,控制列表的一个大小
4、如果你想实现消息队列,你可以使用:lpush + brpop = message queue
Set集合(无序,并且不重复)
sadd key element 向集合key添加element(如果element存在,则添加失败返回0),时间复杂度o(1)
srem key element 将集合key中的element移除掉,时间复杂度o(1)
scard key 计算集合大小
sismember key element 判断element是否在集合中
smembers key 获取集合所有元素
srandmember key number 返回集合中一个或多个随机元素(number 返回数量)
spop key 移除set中的一个随机元素,并返回
sdiff key1 key2 求两个set的差集
sinter key1 key2 求两个set的交集
sunion key1 key2 求两个set的并集
sdiff|sinter|sunion + store destkey 将差集、交集、并集结果保存在destkey中
srandmember 和 spop
spop从集合中弹出
srandmember不会破坏集合
Tips:
sadd = tagging 做一些标签
spop/srandmember = random item 做一些随机数的一些相关的场景
sadd + sinter = social graph 做一些社交相关的应用
Sortedset有序集合(元素(element)不可以重复,分值(score)可以)
zadd key score1 element1(可以是多对) 添加一个有序集合(score浮点数分值),当key存在但不是有序集合类型时,返回一个错误,时间复杂度o(logN)
zrem key element(可以是多个) 移除有序集key中的一个或多个成员,不存在的成员将被忽略,时间复杂度o(1)
zscore key element 返回有序集key中,成员element的score值,如果element元素不是有序集key的成员,或key不存在,返回nil,时间复杂度o(1)
zincryby key increScore element 为集合key的element的score值加上增量increScore或传递一个负数值让score减去相应的值,当key不存在或element不是key的成员时,zincryby key increScore element等同于ZADD key increScore element,当key不是有序集类型时,返回一个错误,score值可以是整数值或双精度浮点数,时间复杂度O(log(N))
zcard key 返回有序集key的总个数,时间复杂度o(1)
zrank key element 返回有序集key中成员element的排名,其中集合成员按score值递增(从小到大)顺序排列,时间复杂度O(log(N))
zrange key start end [WITHSCORES] 返回有序集key中,指定区间内的成员,可以通过使用WITHSCORES选项,让成员和它的score一并返回,时间复杂度O(log(N)+M),N为有序集的基数,而 M为结果集的基数
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] 返回有序集key中,所有score 值介于min和max之间(包括等于min或max)的成员。集合成员按score值递增(从小到大)次序排列。当offset 很大时,定位offset的操作可能需要遍历整个有序集,此过程最坏复杂度为O(N)时间。时间复杂度O(log(N)+M),N为有序集的基数,M为被结果集的基数。
zcount key min max 返回有序集key中,score值在min和max 之间(默认包括score值等于min或max)的成员的数量,时间复杂度:O(log(N))
zremrangebyrank key start stop 移除集合key中,指定排名(rank)区间内的所有成员,时间复杂度:O(log(N)+M),N为有序集的基数,而M为被移除成员的数量
zremrangebyscore key min max 移除有序集key中,所有score值介于min 和max之间(包括等于min或max)的成员。时间复杂度:O(log(N)+M),N为有序集的基数,而M为被移除成员的数量
zrevrank key element 返回有序集key中成员element的排名。其中集合成员按score值递减(从大到小)排序,时间复杂度:O(log(N))
zrevrange key start stop [WITHSCORES] 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。时间复杂度:O(log(N)+M)
zinterstore destination numkeys key 计算给定的一个或多个有序集的交集,其中给定key的数量必须以numkeys参数指定,并将该交集(结果集)储存到destination,时间复杂度:O(N*K)+O(M*log(M)),N为给定key中基数最小的有序集,K为给定有序集的数量,M为结果集的基数。
zunionstore destination numkeys key 计算给定的一个或多个有序集的并集,其中给定key的数量必须以numkeys参数指定,并将该并集(结果集)储存到 destination,时间复杂度:O(N)+O(M log(M)),N为给定有序集基数的总和,M为结果集的基数。