redis深度历险(一):基础数据结构

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这四种数据结构是容器型数据结构,他们共享下面两条通用规则:

  1. create if not exists : 如果容器不存在,那就创建一个,再进行操作。
  2. drop if no elements: 如果容器里元素没有了,那么立即删除元素,释放内存
ps:最近在学习老钱的《redis深度历险》,这算是学习笔记吧。

你可能感兴趣的:(redis)