设为首页 收藏本站
查看: 963|回复: 0

[经验分享] 小崔的笔记本

[复制链接]

尚未签到

发表于 2017-12-20 20:57:32 | 显示全部楼层 |阅读模式
  上周六通宵打牌周日白天只睡3小时累成狗,从今天起以后不能玩太大的了,小赌怡情大赌伤身,和同事朋友有空玩玩还是好的。今天公司外面马路上有人挂灯笼时死了一个人,哎,快过年了悲剧又发生了,真是生命是脆弱的。虽然这一两个月贪玩了点,但技术也不能落下,周一到周五下班没事的话有时候也会上网大致了解一些。今天就接着之前的博客继续开始redis之路。
  至于什么是redis,它是用来做什么的?它的用处有好多,这里我也不一一列举,以后也会有说明,写redis主要是需求驱动,渐进式的学习,因为前面学习了nginx,导致会有多个地方部署程序,那这样如果用户在A登录了,可能再次访问时又会访问B,但这样B可能会判断同一个用户没有登录,既然对用户透明,这样多次登录也是不好的,而redis就可以解决这个问题。还有我们登录app或下单什么的,经常会收到验证码什么的,有效期有的是120s或60s,虽然用数据库也能实现这样的功能,这样的话就要连接数据库做一系列的逻辑验证,如果用redis就会很简单。这些都是redis的用处。redis有五大数据类型,从今天开始以此学习这几种数据类型。今天就先学习字符串类型。首先说明redis这一系列博客我也是参照别人的博客,然后自己动手敲的,地址http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html的内容是学习五大类型主要模仿的对象,大家可以看上面地址的博客。
  一、前戏
  字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
  二、理论

命令原型
时间复杂度
命令描述
返回值APPEND key value
O(1)
如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。
追加后Value的长度。DECR key
O(1)
将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。
递减后的Value值。INCR key
O(1)
将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。
递增后的Value值。 DECRBY key decrement  
O(1)  
将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。
减少后的Value值。INCRBY key increment  
O(1)
将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。
增加后的Value值。GET key
O(1)
获取指定Key的Value。如果与该Key关联的Value不是string类型,Redis将返回错误信息,因为GET命令只能用于获取string Value。
与该Key相关的Value,如果该Key不存在,返回nil。 SET key value  
O(1)
设定该Key持有指定的字符串Value,如果该Key已经存在,则覆盖其原有值。
总是返回"OK"。GETSET key value
O(1)
原子性的设置该Key为指定的Value,同时返回该Key的原有值。和GET命令一样,该命令也只能处理string Value,否则Redis将给出相关的错误信息。
返回该Key的原有值,如果该Key之前并不存在,则返回nil。STRLEN key
O(1)
返回指定Key的字符值长度,如果Value不是string类型,Redis将执行失败并给出相关的错误信息。
返回指定Key的Value字符长度,如果该Key不存在,返回0。SETEX key seconds value
O(1)
原子性完成两个操作,一是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)。该命令主要应用于Redis被当做Cache服务器使用时。
#通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期.在Redis 2.8以后,当key不存在时,返回-2。SETNX key value
O(1)
如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回。
1表示设置成功,否则0。 SETRANGE key offset value
O(1)
替换指定Key的部分字符串值。从offset开始,替换的长度为该命令第三个参数value的字符串长度,其中如果offset的值大于该Key的原有值Value的字符串长度,Redis将会在Value的后面补齐(offset - strlen(value))数量的0x00,之后再追加新值。如果该键不存在,该命令会将其原值的长度假设为0,并在其后添补offset个0x00后再追加新值。鉴于字符串Value的最大长度为512M,因此offset的最大值为536870911。最后需要注意的是,如果该命令在执行时致使指定Key的原有值长度增加,这将会导致Redis重新分配足够的内存以容纳替换后的全部字符串,因此就会带来一定的性能折损。
修改后的字符串Value长度。 GETRANGE key start end
O(1)
如果截取的字符串长度很短,我们可以该命令的时间复杂度视为O(1),否则就是O(N),这里N表示截取的子字符串长度。该命令在截取子字符串时,将以闭区间的方式同时包含start(0表示第一个字符)和end所在的字符,如果end值超过Value的字符长度,该命令将只是截取从start开始之后所有的字符数据。
子字符串 SETBIT key offset value
O(1)
设置在指定Offset上BIT的值,该值只能为1或0,在设定后该命令返回该Offset上原有的BIT值。如果指定Key不存在,该命令将创建一个新值,并在指定的Offset上设定参数中的BIT值。如果Offset大于Value的字符长度,Redis将拉长Value值并在指定Offset上设置参数中的BIT值,中间添加的BIT值为0。最后需要说明的是Offset值必须大于0。
在指定Offset上的BIT原有值。 GETBIT key offset
O(1)
返回在指定Offset上BIT的值,0或1。如果Offset超过string value的长度,该命令将返回0,所以对于空字符串始终返回0。
在指定Offset上的BIT值。 MGET key [key ...]
O(N)
N表示获取Key的数量。返回所有指定Keys的Values,如果其中某个Key不存在,或者其值不为string类型,该Key的Value将返回nil。
返回一组指定Keys的Values的列表。 MSET key value [key value ...]
O(N)
N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SET命令。
该命令不会失败,始终返回OK。  MSETNX key value [key value ...]
O(N)
N表示指定Key的数量。该命令原子性的完成参数中所有key/value的设置操作,其具体行为可以看成是多次迭代执行SETNX命令。然而这里需要明确说明的是,如果在这一批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,即所有的修改都不会生效。
1表示所有Keys都设置成功,0则表示没有任何Key被修改。  三、实操
  

127.0.0.1:6379> append mykey helloworld  
(integer)
10  
127.0.0.1:6379> get mykey
  
"helloworld"
  
127.0.0.1:6379> set mykey 20
  
OK
  
127.0.0.1:6379> decr mykey
  
(integer) 19
  
127.0.0.1:6379> incr mykey
  
(integer) 20
  
127.0.0.1:6379> decrby mykey -5
  
(integer) 25
  
127.0.0.1:6379> incrby mykey -6
  
(integer) 19
  
127.0.0.1:6379> strlen mykey
  
(integer) 2
  
127.0.0.1:6379> setex mykey 60 18575533***
  
OK
  
127.0.0.1:6379> ttl mykey
  
(integer) 55
  
127.0.0.1:6379> ttl mykey
  
(integer) 50
  
127.0.0.1:6379> ttl mykey
  
(integer) 17
  
127.0.0.1:6379> ttl mykey
  
(integer) -2
  
127.0.0.1:6379> setnx mykey 123
  
(integer) 1
  
127.0.0.1:6379> get mykey
  
"123"
  
127.0.0.1:6379> setnx mykey 234
  
(integer) 0
  
127.0.0.1:6379> get mykey
  
"123"
  
127.0.0.1:6379> setrange mykey 1 2
  
(integer) 3
  
127.0.0.1:6379> get mykey
  
"123"
  
127.0.0.1:6379> setrange mykey 3 4
  
(integer) 4
  
127.0.0.1:6379> get mykey
  
"1234"
  
127.0.0.1:6379> setrange mykey 6 3
  
(integer) 7
  
127.0.0.1:6379> get mykey
  
"1234\x00\x003"
  
127.0.0.1:6379> getrange mykey 3 4
  
"4\x00"
  
127.0.0.1:6379> getrange mykey 9 10
  
""
  
127.0.0.1:6379> del mykey
  
(integer) 1
  
127.0.0.1:6379> get mykey
  
(nil)
  
127.0.0.1:6379> setbit mykey 7 1
  
(integer) 0
  
127.0.0.1:6379> get mykey
  
"\x01"
  
127.0.0.1:6379> set mykey 7 1
  
(error) ERR syntax error
  
127.0.0.1:6379> setbit mykey 6 1
  
(integer) 0
  
127.0.0.1:6379> get mykey
  
"\x03"
  
127.0.0.1:6379> getbit mykey 6
  
(integer) 1
  
127.0.0.1:6379> getbit mykey 10
  
(integer) 0
  
127.0.0.1:6379> del mykey
  
(integer) 1
  
127.0.0.1:6379> get mykey
  
(nil)
  
127.0.0.1:6379> mset mykey a mykey1 b
  
OK
  
127.0.0.1:6379> mget mykey mykey1
  
1) "a"
  
2) "b"
  
127.0.0.1:6379> msetnx mykey2 c mykey3 d
  
(integer) 1
  
127.0.0.1:6379> mget mykey mykey1 mykey2 mykey3
  
1) "a"
  
2) "b"
  
3) "c"
  
4) "d"
  
127.0.0.1:6379> msetnx mykey e mykey4 f
  
(integer) 0
  
127.0.0.1:6379> mget mykey mykey4
  
1) "a"
  
2) (nil)
  
127.0.0.1:6379>
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426213-1-1.html 上篇帖子: 听歌敲代码 下篇帖子: 第十二章 redis-cluster搭建(redis-3.2.5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表