Redis数据结构
Redis数据结构
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数据读写操作命令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数据结构的更多相关文章
- Redis 数据结构使用场景
转自http://get.ftqq.com/523.get 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的 ...
- Redis数据结构底层知识总结
Redis数据结构底层总结 本篇文章是基于作者黄建宏写的书Redis设计与实现而做的笔记 数据结构与对象 Redis中数据结构的底层实现包括以下对象: 对象 解释 简单动态字符串 字符串的底层实现 链 ...
- Redis 数据结构与内存管理策略(上)
Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- Redis 数据结构与内存管理策略(下)
Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- Redis数据结构之intset
本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST ...
- Redis数据结构之robj
本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的.dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds.而va ...
- Redis 数据结构之dict(2)
本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis 数据结构之dict>,我们对dict的结构有了大致的印象.此篇文章对dict是如何维护数据结构的做个详细的理解. 老规 ...
- Redis 数据结构之dict
上篇文章<Redis数据结构概述>中,了解了常用数据结构.我们知道Redis以高效的方式实现了多种数据结构,因此把Redis看做为数据结构服务器也未尝不可.研究Redis的数据结构和正确. ...
- Redis数据结构以及应用场景
1. Redis数据结构以及应用场景 1.1. Memcache VS Redis 1.1.1. 选Memcache理由 系统业务以KV的缓存为主,数据量.并发业务量大,memcache较为合适 me ...
随机推荐
- hdu3966(树链剖分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:一颗树上,每个点有权值,定义三种操作: 1)I操作表示从a到b节点之间的节点都加上一个值 ...
- 【PLSQL】绑定变量,活跃SQL,软硬解析解析
************************************************************************ ****原文:blog.csdn.net/clar ...
- 关于Hbase的cache配置
关于Hbase的cache配置 在hbase中的hfilecache中,0.96版本号中新添加了bucket cache, bucket cache通过把hbase.offheapcache.perc ...
- hdu1506(dp减少重复计算)
可以算出以第i个值为高度的矩形可以向左延伸left[i],向右延伸right[i]的长度 那么答案便是 (left[i] + right[i] + 1) * a[i] 的最大值 关键left[i] 和 ...
- hdu1500 (排序+单调队列优化 )
从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A<=B<=C, 费用是(A-B)^2, 问最小的费用是多少. 将n根筷子排序之后,可以知道A和B的下标一定是连续的. 比如有 ...
- poj1182食物链(种类并查集)
http://poj.org/problem?id=1182 r[x] = 0 表示x和父亲是同类r[x] = 1 表示x吃父亲r[x] = 2 表示x被父亲吃因为只存在三种动物,且三种动物构成了环形 ...
- Windows Phone开发(14):数据模板
原文:Windows Phone开发(14):数据模板 数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧. 用白话文说,数据模板就是用来规范 ...
- http1.0 和 http1.1 区别
http1.0 和 http1.1 主要区别 1.背景 KeepAlive是就是通常所称的长连接.KeepAlive带来的好处是可以减少tcp连接的开销,这对于短response body的请求效 ...
- DIY.NETORM帧——技术储备(1)Attribute
1.他是什么 ? 首先.我们当然Attribute它是一类,以下是一msdn文档对它的描写叙述: 公共语言执行时同意你加入类似keyword的描写叙述声明,叫做attributes, ...
- sql查询 数据库 表 字段 等
1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FR ...