Redis数据结构详解(一)
前言
Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据记录。Redis还支持对这些数据类型做更多的服务端操作,从而也能减少网路的IO次数与数据体积,这里也比Memcached要方便与高效,只针对这一点啊,想喷的左上角群喷。上篇吹牛逼20分钟教你做memcached大神
Redis主要支持的数据类型有5种:String ,Hash ,List ,Set ,和 Sorted Set。
下面我针对Redis支持的这几种数据类型做详细操作展示,供大家理解记忆。
Redis数据类型String
string类型在redis中是最常见的类型,value存储最大数据量为512M,可以存放json数据,图像数据等等。
下面跟着敲Redis命令操作String类型数据的代码吧。
redis数据写命令Set,相当于数据插入
redis 127.0.0.1:6379> set name zlh --返回值: ok,说明插入成功。如果当前name存在值则覆盖替换原有的value值。
redis数据读命令Get,获取数据
redis 127.0.0.1:6379> get name --返回值: "zlh" ,如果当前key没有value值,则返回null
redis数据追加命令Append,追加数据
redis 127.0.0.1:6379> append name ' is my friend' --返回值:"zlh is my friend" ,如果当前key的value有值则附加到原有string后面,如果没有则写入。
redis数据删除
redis 127.0.0.1:6379>del name
redis数据读写操作命令GetSet,获取原有value值的同时写入新的value值
1、redis 127.0.0.1:6379>getset name zlh --返回值:"zlh is my friend",这里返回的是原有name的value值,同时又给name的value设置新值zlh。此时name的值真实值为zlh
2、redis 127.0.0.1:6379>get name --返回值:zlh ,因为上面getset给name的value设置值为zlh。
redis数据加法计算命令incr,incrby,数据加法运算,incr为+1内置运算,incrby为+n自设n运算
1、redis 127.0.0.1:6379>incr name ---返回值:“数据不是整型或数据超出64位有符号整形数据范围” ,由于原有name的value为"zlh",所以不能转换为整型,故报异常。
2、redis 127.0.0.1:6379>incr age ----返回值:1,由于不存在age的key与value值,但是默认age为key值为0进行+1运算。
3、redis 127.0.0.1:6379>incr age ---返回值:2,由于上一行代码给age赋值为1,这里incr命令进行+1运算,故返回值为2。
4、redis 127.0.0.1:6379>incrby age 10 ---返回值:12 ,因为原有age是2,这里+10故为12。
redis数据减法计算命令decr,decrby, 数据减法运算,decr为-1内置运算,decrby为减n自设n运算
1、redis 127.0.0.1:6379>decr name --返回值:“数据不是整型或数据超出64位有符号整形数据范围” ,由于原有name的value为"zlh",所以不能转换为整型,故报异常。
2、redis 127.0.0.1:6379>decr age --返回自:11,因为原有age的value值为12,这里decr是自减1的意思,故为11。
3、redis 127.0.0.1:6379>decrby age 10 --返回值:1,因为原有age为11,这里-10,故为1。
redis获取string长度的命令strlen
redis 127.0.0.1:6379>strlen name --返回值:3,因为name的value值为zlh,故长度为3,如果该key或者value不存在,则返回0。
redis设置value值并设置过期时间命令setex(单位秒)
redis 127.0.0.1:6379>setex sex 20 male ---返回值:ok,设置key为sex的value值为male,缓存的过期时间为20s。
redis 127.0.0.1:6379>ddl sex ---返回值: 剩余过期时间,0为已过期,-1为永不过期。
redis 127.0.0.1:6379>get sex ---返回值:male,说明此时为没有过期,当已经过期此处返回数据为null。
redis赋值判断原值是否存在,存在不赋值,返回0;不存在才赋值,返回1;命令setnx
redis 127.0.0.1:6379>setnx name Tom ---返回值:0,因为name的原有value为zlh,存在值则不赋值。
redis 127.0.0.1:6379>gete name ---返回值:zlh,因为有值,故上面赋值为tom失败,返回0。
redis 127.0.0.1:6379>setnx phone 18501733702 ---返回值:1,赋值成功,因为原来不存在phone的key与value。
redis 127.0.0.1:6379>get phone ---返回值:18501733702,说明上面的setnx赋值成功。
redis字符串替换赋值,从指定位置开始替换,命令setrange
redis 127.0.0.1:6379>setrange phone 9 123 --返回值:12,12为字符串长度,11位号码变成了12位。因为从第9位开始替换,替换到原有字符串的最后一位还没有替换完毕,所以在最后面添加啦一位设置为3。
redis 127.0.0.1:6379>get phone ---返回值为:185017337123.
redis 127.0.0.1:6379>set phone 1 ---这里为了下面说下setrange的其他特性,把电话设置为1.
redis 127.0.0.1:6379>setrange phone 3 aaa ---返回值为:6,因为原有phone的value值为1,不到三位,用0*00替换2位,所以要添加2为才能替换第三位后面的值为aaa。
redis 127.0.0.1:6379>get phone ---返回值:1\*00\*00aaa。理解下上面的操作就知道这里为什么是这样的返回值了。
redis截取字符串,从下标为n开始截取到n或n+1,类似c#中的substring,命令getrange
redis 127.0.0.1:6379>set phone 18501733701 ----方便下面操作
redis 127.0.0.1:6379>getrange phone 1 5 ---返回值:85017,因为getrange是从下标为1开始截取截取到下标为5,这里包含下标为5的值。
redis 127.0.0.1:6379>getrange phone 0 0 ---返回值:1,从下标为0开始截取,截取到下标为0,包含下标为0。故返回值为1。
redis 127.0.0.1:6379>getrange phone 10 13 --返回值为:1,此号码下标直到10的11位号码,从10开始截取,截到第13位,后2位不存在忽略,只返回第10位。故返回干净的1。
redis批量操作修改及读取string数据,命令mget,批量读取,命令mset,批量赋值,命令msetnx,带事务性的赋值,发现有一个key已经存在,所有事务回归,不做赋值处理操作
redis 127.0.0.1:6379>mset name zlh age 30 ---返回值:ok,这里设置了 key为name和age的value分别为zlh,30
redis 127.0.0.1:6379>mget name zlh ---返回值:1>zlh 2>30 。
redis 127.0.0.1:6379>msetnx name Jim address China ---返回值为:0,没有做任何修改,因为key为那么已存在。
redis 127.0.0.1:6379>mget name address ---返回值:1>zlh 2>null
redis 127.0.0.1:6379>msetnx address China,hobbies sports --返回值为:1,插入成功
redis 127.0.0.1:6379>mget address hobbies ---返回值:1>China 2>sports
说说windows环境安装与下载
1、上面是扯淡的标题。
2、其它几种数据类型,明晚再写。
3、这里太晚啦,我不写啦,要不死求啦,安装与下载,及redis从入门到精通我会一点点整理上来,希望您能加入左上角的群,我们一起做沟通交流,晚安。
Redis数据结构详解(一)的更多相关文章
- 5种Redis数据结构详解
本文主要和大家分享 5种Redis数据结构详解,希望文中的案例和代码,能帮助到大家. 转载链接:https://www.php.cn/php-weizijiaocheng-388126.html 2. ...
- Redis数据结构详解之List(二)
序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用red ...
- redis数据结构详解之Hash(四)
序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引 ...
- Redis数据结构详解之Zset(五)
序言 Zset跟Set之间可以有并集运算,因为他们存储的数据字符串集合,不能有一样的成员出现在一个zset中,但是为什么有了set还要有zset呢?zset叫做有序集合,而set是无序的,zset怎么 ...
- Redis数据结构详解之Set(三)
序言 在Redis中,Set和list都是字符串序列,非常相似,不同之处在于Set是用哈希表来保持字符串的唯一性,没有先后顺序,不像list一样,可以在首尾增删数据.但是set也有自己的相应处理命令来 ...
- Redis数据结构详解,五种数据结构分分钟掌握
redis数据类型分为:字符串类型.散列类型.列表类型.集合类型.有序集合类型.redis这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作.原子操作:最小的操作单位,不能 ...
- Redis数据结构详解(2)-redis中的字典dict
前提知识 字典,又被称为符号表(symbol table)或映射(map),其实简单地可以理解为键值对key-value. 比如Java的常见集合类HashMap,就是用来存储键值对的. 字典中的键( ...
- Redis数据结构详解(1)-redis中的字符串(SDS)
前提知识 我们先从百科上摘下Redis的解释: Redis是一个使用ANSI C编写的开源.支持网络.基于内存.分布式.可选持久性的键值对存储数据库. (不用过多在意ANSI,它只是一个标准,你可以理 ...
- redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
随机推荐
- 加深一下BlockingQueue的认识
认识BlockingQueue BlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口. add:添加元素到队列里,添加成功返 ...
- 黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结
黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结 作者:蒸米,耀刺,黑雪 @ Team OverSky 0x00 序 iOS的安全性远比大家的想象中脆弱,除了没有公开的漏洞以外,还有很多已经公开 ...
- iOS---iOS10适配iOS当前所有系统的远程推送
一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...
- android http 抓包
有时候想开发的时候想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得到一些不为人知的api,比如还可以干些“坏事”... 需要工具: Fiddler2 抓包(点击下载) Android ...
- H5项目开发分享——用Canvas合成文字
以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...
- 用MongoDB分析合肥餐饮业
看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...
- 关于BAPI_PATIENT_CREATE(病患主数据创建)
第一次使用BAPI,遇到几个问题.现总结如下. CALL FUNCTION 'BAPI_PATIENT_CREATE' EXPORTING client = * INSTITUTION = '*' * ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- git快速get
配置:git config --global user.name 'yangshaoxiang' git config --global user.email '254135495@qq.com' s ...
- Yeoman 学习笔记
yoeman 简介:http://www.infoq.com/cn/news/2012/09/yeoman yeoman 官网: http://yeoman.io/ yeoman 是快速创建骨架应用程 ...