Redis 使用体验
安装
ubuntu16.4:
sudo apt install redis-server
redis-server (启动redis服务器)
redis-cli (在另外的终端窗口中启动)
127.0.0.1:6379>
简单读写 redis:
127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1" (字符串)
127.0.0.1:6379> set key1 33
OK
127.0.0.1:6379> get key1
(integer) 33 (整数)
看上去 Redis 没有表的概念,只有键(key);值的类型也是自动识别出来的。识别出整数后,可以用 incr 命令增加这个值,incr命令针对到字符串类型的值就报错了。
哈希
H 开头的几个命令可以向同一个 key 中设置多个值,类似于结构体,如:
127.0.0.1:6379> HMSET key2 name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> HGETALL key2
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
列表
向同一个 key 中添加多个值,按插入顺序排序。
127.0.0.1:6379> lpush key4 ss
(integer) 1
127.0.0.1:6379> lpush key4 33
(integer) 2 (2是序号)
127.0.0.1:6379> lindex key4 1
"ss" (根据序号取值)
127.0.0.1:6379> rpush key4 wbwang wang webb
(integer) 5 (右侧插入多个值)
pop 命令用于从列表中删除元素。rpop
和 lpop
分别是从列表的右侧和左侧删除元素。
rpush
配合 lpop
就是实现了队列的功能(先进先出);rpush
配合 rpop
就实现了堆栈的功能(后进先出)。
集合
无序,值唯一,有点像枚举值。
redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey
1) "mysql"
2) "mongodb"
3) "redis"
有序集合
在集合基础上增加了额外的排序字段
redis 127.0.0.1:6379> ZADD key5 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD key5 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD key5 4 mysql (将分数由3改成了4)
(integer) 0
127.0.0.1:6379> ZRANGE key5 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mysql"
4) "4"
基数估计 HyperLogLog
构造一个可能出现重复元素的集合(如几亿元素),则估算基数(不重复的元素数)需要很大的内存和计算量,Redis 提供了 HyperLogLog 命令来在误差可接受的范围内快速估算基数。
redis 127.0.0.1:6379> PFADD runoobkey "redis"
1) (integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mysql"
1) (integer) 1
redis 127.0.0.1:6379> PFCOUNT runoobkey
(integer) 3
索引
增加了两个哈希,key 是 usr:1
和 usr:2
:
hmset usr:1 uid 1 name aaa credit 10 type 0
hmset usr:2 uid 2 name bbb credit 20 type 1
hmset usr:3 uid 3 name ccc credit 25 type 1
如何快速检索出 type 是 1 的用户?办法是利用 redis 的有序集合(zset)结构,手工维护专门的索引:
zadd usr.index.type 0 0:1
zadd usr.index.type 0 1:2
zadd usr.index.type 0 1:3
冒号前面的是 type,后面的是 uid。
zrangebylex usr.index.type [1: (1;
1) "1:2"
2) "1:3"
方括号表示 包含
,括号表示 不包含
。而中间的空格隔开了两个范围参数,表示按字母顺序大于(可能包含)第一个参数,小于(可能包含)第二个参数。第一个参数用-
表示字母顺序的无穷小,第二个参数用 +
表示字母顺序的无穷大。
分号(0x3B)在ascii码表中紧挨在冒号(0x3A)后面,所以上面使用了分号表示。也可以直接写成 [1: (1\0x3B
,只是不更好理解。
score 当索引
还可以把日期转化为数字,放在分数中充当索引用,如:
zadd question_index1 20180608153053 "question_335"
zrange question_index1 20180608153052 -1 withscores
1) "question_335"
2) "20180608153053"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论