Redis 使用体验

发布于 2021-05-10 22:21:57 字数 3541 浏览 1615 评论 0

安装

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

懂王

文章 0 评论 0

清秋悲枫

文章 0 评论 0

niceone-tech

文章 0 评论 0

小伙你站住

文章 0 评论 0

刘涛

文章 0 评论 0

南街九尾狐

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文