Redis学习笔记
Redis是单线程+多路I0复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket) 的就绪状态,比如调用select和polI函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
五大数据操作基本命令
String
选择数据库,Redis有16个数据库编号从0开始,默认第一个使用第一个数据库:
select 0
添加键值对:
set <key> <value>
查询对应键值:
get <key>
将给定的值追加到原值的末尾:
append <key> <value>
获得值的长度:
strlen <key>
key不存在则赋值:
setnx <key> <value>
将key存储的数字值增1
incr <key>
减1:
decr <key>
自定义增减数:
incrby|decrby <key> <步长>
设置多个key-value对:
mset <key1> <value1> <key2> <value2>
获取多个key-value对:
mget <key1> <value1> <key2> <value2>
设置多个key-value对,当且仅当所有key不存在:
msetnx <key1> <value1> <key2> <value2>
获取key对应值的范围:
getrange <key> <起始> <结束>
从起始位置开始覆写value:
setrange <key> <起始> <value>
设置键值同时设置过期时间:
setex <key> <过期时间> <value>
设置新值同时获得旧值:
getset <key> <value>
查询当前库所有键:
keys *
判断键的存在:
exists <key>
结果返回(integer) 1
代表true
结果返回(integer) 0
代表false
查看键的类型:
type <key>
删除某键:
del <key>
为键值设置过期时间秒为单位:
expire <key> <second>
查看还有多少秒过期(返回-1
代表永不过期,返回-2
代表已过期):
ttl <key>
查看当前数据库key的数量:
dbsize
清空当前库:(火车票买好)
flushdb
通杀全部库:(飞机票买好)
flushall
List
从左边/右边插入一个或多个值:
lpush|rpush <key> <value1> <value2>
从左边/右边吐出一个值:
lpop|rpop <key>
从key1列表右边吐出一个值假如到key2左边:
rpoplpush <key1> <key2>
按照索引下标获得元素(从左到右):
lrange <key> <start> <stop>
lindex <key> <index>
获得列表长度:
llen <key>
在value前面/后面插入newvalue:
linsert <key> before|after <value> <newvalue>
从左边删除n个value(n为正时从左往右删,负从右往左,0全删):
lrem <key> <n> <value>
Set
添加一个或多个member元素加入到集合key中,已存在的元素会被忽略:
sadd <key> <value1> <value2>
取出该集合所有值:
smembers <key>
判断集合key是否含有该value:
sismember <key> <value>
返回集合元素个数:
scard <key>
删除某元素:
srem <key> <value1> <value2>
随机吐出值:
spop <key>
随机取n个值,且不会删除:
srandmember <key> <n>
返回两个集合交集/并集/差集:
sinter|sunion|sdiff <key1> <key2>
Hash(类似java中Map<String,String>)
给集合中的field键赋值value:
hset <key> <field> <value>
取value:
hget <key> <field>
批量设置hash值:
hmset <key1> <>field1> <value1> <field2> <value2>
key中是否存在field:
hexist <key> <field>
列出该集合所有field/value:
hkeys|hvals <key>
为value值加上增量:
hincrby <key> <field> <increment>
当且仅当field不存在时,将field值设为value:
hsetnx <key> <field> <value>
Zset
将一个或多个member元素及其score值添加到集合里:
zadd <key> <score1> <value1> <score2> <value2>
根据下标返回元素(带withscores,可以让分数和值一起返回):
zrange <key> <start> <stop>
返回集合中所有score值介于min和max之间次序排列:
zrangebyscore <key> min max
同上,改为从大到小排序:
zrevrangebyscore key max min
为元素的score加上增量:
zincrby <key> <increment> <value>
删除指定值的元素:
zrem <key> <value>
统计分数区间内元素个数:
zcount <key> <min> <max>
返回该值在集合中的排名,从0开始:
zrank <key> <value>