博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis系统学习 二、数据结构
阅读量:5273 次
发布时间:2019-06-14

本文共 2108 字,大约阅读时间需要 7 分钟。

一、字符串
    1、在Redis里,字符串是最基本的数据结构。当你在思索着关键字-值对时,你就是在死锁着字符串数据结构。不要被名字给搞混了。
常见实例: set users:leto "{name: leto, planet: dune, likes: [spice]}"
除此之外,Redis还有一些常用操作,例如 strlen<key> 获取一个关键字对应值的长度。
getrange <key> <start> <end>将返回指定范围内的关键字对应值;(类似于PHP的substr,字符串截取功能) 
append <key> <value>会将value附加到已存在的关键字对应值中(如果该关键字并不存在,则会创建一个新的关键字-值对)
strlen users:leto
(integer) 42
getrange users:leto 27 40
"likes: [spice]"
append users:leto " OVER 9000!!"
(integer) 54
作为一个有些含糊的用例,我们可以看到,对于一些自定义的空间效率很高的(space-efficient)串行化对象,
对于值的加减 可以使用 这些命令:incr incrby decr decrby 命令
穿插一个很吊用来做大数据量统计的东西:bitmap,就是位图
通过SETBIT todayvister 3 1 SETBIT todayvister 2 1  可以统计 BITCOUNT todayvister  效率超级高,亿级别统计 也只需要几十毫秒
如果需要取交集 ,比如 连续一周或者 一个月 登录数  BITOP AND DES  DAY1 DAY2 然后BITCOUNT  下 好屌
可以参考
文章链接地址
二、散列 (HASHES)
散列的设置值和获取值的方法为: hset key field value ; hget key field
还可以同一时间设置多个域、同一个时间获取多个域,获取多个时间
hmset users:goku race 222 age 737
hmget users:goku race powerlevel
hgetall users:goku 获取所有的域  hkeys users:goku 获取所有域的key  hdel users:goku age 删除某个域
散列的数据结构比普通的字符串数据结构具有更多的可操作性。我们可以使用一个散列数据
三、列表(Lists)
比较简单,就是一个队列,有索引,可以基于索引进行一些高效操作。
ltrim  ltrim key start stop  , ltrim 命令会将制定范围外的值都删除掉,只留下范围内的值。
一般一些任务啥的,都可以通过队列 来做,之前我做过一个日志系统,就是通过队列来进行的
四、集合(Sets)
集合数据结构尝尝被用来存储只能唯一存在的值,并提供了许多的基于集合的操作,例如并集。集合数据结构没有对值进行排序,但是其提供了高效的基于值的操作。使用集合数据结构的典型用例是朋友名单的实现
sadd friends:leto wme wjh ywh luci
sadd friends:duncan paul wjh
然后取交集 sinter friends:leto friends:duncan
也可以把交集存起来 sinterstore friends:leto friends:duncan
五、分类集合(Sorted Sets)
最后也是最强大的数据结构,分类集合数据结构。如果说散列数据结构类似于字符串数据结构。主要区分是域的概念,那么分类集合数据结构,
主要区分是标记的概念。标记提供了排序(sorting)和轶划分(ranking)的功能。如果我们想要一个轶分类的朋友名单,可以这样做
zadd friends:duncan 70 ghanima 95 paul 95 chani 75 jessica 1 vladimir
对于duncan的朋友,要怎样计算出标记(score)为90或更高的人数
zcount friends:duncan 90 100 好屌
如何获取某个人在名单里的轶(rank 排名)
zrevrank friends:duncan chani (zreverank 轶是从高到低,zrank 是从低到高 看需求用咯)
小结:
对于Redis的5种数据结构,我们进行了高层次的概述。一件有趣的事情是,相对于最初构建时的想法,你经常能用Redis创造出一些更具实效的事情。对于字符串数据结构和分类集合数据结构的使用,很可能存在一些构建方法是还没有人想到的。当你理解了那些常用的应用案例后,你将发现Redis对于许多类型的问题,都是很理想的选择。还有,不要因为Redis展示了5中数据结构和相应的各种方法,就认为你必须把所有东西都用上。只是用一些命令去构建一个特性是很常见的。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wangmy/p/5691766.html

你可能感兴趣的文章
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>