Reids基础数据结构
String类型
// name为一个key codehole为一个value
/** 键值对 */
set name codehole //设置key value
get name // 获取key的value
exists name //key是否存在
del name // 删除某个key
/** 批量键值对 */
mset name1 boy name2 girl name3 unknown //批量设置
mget name1 name2 name3 //批量获取
/** 过期和set命令扩展*/
set name codehole
get name
expire name 5 //5s后过期
setex name 5 codehole //5s后过期,等价于set + expire
setnx name codehole // 如果name不存在就执行set创建
/** 计数*/
set age 30 //设置成一个整数
incr age //age自增1
incr by age 5 //age增加5
List(列表)
/** 右进左出:队列*/
rpush books python java golang #将python java golang放入books队列
llen books # books的长度
lpop books #左边弹出
/** 右进右出:栈*/
rpush books python java golang #右进
rpop books #右出
/**慢操作*/
rpush books python java golang
lindex books 1 #获取第二个元素 O(n),慎用
lrange books 0 -1 # 获取所有的元素 O(n) 慎用
ltrim books 1 -1 # 保留第二个开始到倒数第一个元素 所有元素(-2标识倒数第二),其余删掉。此命令就是删除掉第一个
ltrim books 1 0 #清空整个列表,因为去见范围长度为负
llen books #长度
Hash(字典)
hset books java "think in java" #向hash结构books中添加key-value
hgetall books #得到books全部数据,key和value都出现
hlen books #hash结构books的长度
hget books java #得到hash结构books中可以为java的value
hset books golang "learning go programming" #更新book中key为golang的value
hmset books java "effective java" python "learning python" golang "modern golang programming" #批量set
# 同字符串对象一样,hash结构中的单个子key也可以进行计数,对应指令是hincrby,和incr,使用基本一样
hincrby user-laoqian age 1
Set(集合)
Redis的集合相当于java中中HashSet,它内部的键值対是无序的唯一的。它的内部实现相当于一个特殊的字典,字典中所有的value都是一个值 NULL。
sadd books python # 向set结构的books中插入 python
sadd books python # key重复,插入失败
sadd books java golang # 向set结构的books中插入多个
smembers books # 展示set结构的books中全部的key值。需注意展示顺序和插入顺序不同,因为set是无序的
sismember books java # 查询某个value是否存在(1:存在,0:不存在)
scard books # 获取books长度
spop books # 弹出一个
Zet(有序集合)
zset可能是Redis提供的最为特色的数据结构,它也是面试中面试官最爱问的数据结构。它类似于Java的SortedSet和HashMap的结合体,一方面它是一个set,保证了内部value的唯一性,另一方面它可以给每个value赋予一个score,代表这个value的排序的权重。
zadd books 9.0 "think in java" #向zset结构books中插入score为9.0的value:"think in java"
zrange books 0 -1 # 按socore顺序(由小到大)输出所有value(从第一个开始到倒数第一个)
zrevrange books 0 -1 # 按score逆序(由大到小)列出
zcard books # 结构为zset的books中的value个数 相当于count()
zscore books "java concurrency" # 获取books中value为"java concurrency"的score
zrank books "java concurrency" # value为"java concurrency"按照score(正序:由小到大)的排名名次 (排名第一输出0)
zrangebyscore books 0 8.91 # 根据score分值区间遍历(即 score在0到8.91之间的value)
zrangebyscore books -inf 8.91 withscores # 遍历socre在区间(-∞,8.91]的value,并且携带scores
zrem books "java concurrency" # 删除value为"java concurrency"的记录
容器型数据结构的通用规则
list/set/hash/zset这四种数据结构是容器型数据结构,他们共享下面两条通用规则:
- create if not exists : 如果容器不存在,那就创建一个,再进行操作。
- drop if no elements: 如果容器里元素没有了,那么立即删除元素,释放内存