1,KEYS pattern,获得符合规则的键名列表
glob风格的通配符规则:
? 匹配一个字符
* 匹配任意个包括0个字符
[]匹配任一个字符,可以使用-表示一个范围
\x 匹配x,用于转义字符
KYES命令需要遍历redis中所有键,当键数量较多时会影响性能,因此不建议在生产中使用
2,redis的键名最佳命名规则:
对象类型:对象ID:对象属性,比如user:6:friends来存储ID为1的用户的好友列表
对于多个单词则推荐使用.分隔符,另外可读性也非常重要,不要省这么一点点空间。
3,生成自增ID:
RDBS中科院使用AUTO_INCREMENT来实习自增ID主键,redis中可以对每一类对象使用名为users:count的键来存储当前类型的对象的数量,每次增加一个新对象都使用INCR原子命令获取该新对象的ID值即可。
4,散列类型hash
适合用来存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值存储属性值。
一般来讲存储对象可以用json序列化的字符串,可以用hash,如果是需要频繁的获取或者更新对象的某些属性,为了防止传输开销和序列化开销,最好使用hash。
散列类型还有一个好处,就是对于同一类对象,每个对象的属性可以不一样,这在关系型数据库中不可能
# 增加数字
HINCRBY key field increment
# 只获取字段名或字段值
HKEYS key / HVALS key / HLEN key
5,集合类型Set
# 获取Set中元素个数
SCARD key
# 获取Set中所有元素
SMEMBERS key
# 进行集合运算并将结果存储
SDIFFSTORE dest key1 key2
SINTERSTORE dest key1 key2
SUNIONSTORE dest key1 key2
# 随机获取Set中元素
SRANDMEMBER key count
count 为正数的时候随机获取count个不重复元素,为负数时候随机获取|count|个可能重复元素
6,有序集合SortedSet类型
List和SortedSet的应用场景区别:
1) List类型是通过LinkedList实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更适合实现如 新鲜事 日志 这样很少访问中间元素的应用。
2) SortedSet类型使用散列表和跳跃表SkipList实现,所以即使读取位于中间的部分的元素速度很非常快,时间复杂度是O(log(N)),不过比Hash慢,Hash是O(1)
3) List中不能简单调整某个元素的位置,但是有序集合可以(通过更改元素的score)
4) SortedSet比List更耗内存(PS:这不废话吗,没有免费午餐)
SortedSet可以说是redis中最高级的数据结构了,吊爆了~
# ZRANGE key start end [WITHSCORES]
按照元素score分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端元素,索引从0开始)
# ZRANGEBYSCORE key min max [WITHSCORES] LIMIT offset count
如果希望分数范围不包括端点值,可在分数前加上(符号。
ZRANGEBYSCORE scoreboard (80 +inf
后面的offset和count跟mysql中的含义一样,一个是偏移量,一个是数量
# ZREVRANGEBYSCORE scoreboard 100 0 LIMIT 0 3
注意上面的min和max是跟前面的ZRANGEBYSCORE是相反的
本人博客已搬家,新地址为:http://yidao620c.github.io/