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

[经验分享] Redis数据库的学习与实践—redis的数据类型

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-15 09:41:19 | 显示全部楼层 |阅读模式
Redis的数据类型:1:Strings类型及操作:
String类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。
(1)Set方法,设置key对应的值为String类型的value。
例如:设置一个name=inter的键值对:
127.0.0.1:6379 > set name inter
OK
取值:
127.0.0.1:6379> get name
“inter”
覆盖值:
127.0.0.1:6379> set name millan
127.0.0.1:6379> get name
“millan”
后面设置的值,会将之前设置的值给覆盖掉。
如果后面在设置值的时候不想覆盖之前的值,可以使用:setnx
(2)Setnx在操作的时候,会首先判断这个name里面是否存在值,只有当name里面不包含值的情况下,才会设置成功。(nx代表not exist的意思)
  例如:
#第一种情况,setnx判断name存在值,所以后面的设值返回(integer)0,设值不成功
127.0.0.1:6379> set name inter
OK
127.0.0.1:6379> setnx name millan
(integer) 0
#对一个没有设过值的变量进行设值,返回(integer)1,通过get方法验证,设值成功
127.0.0.1:6379> setnx new_name inter
(integer) 1
127.0.0.1:6379> get new_name
"inter"
(3)setex
设置key对应的值为string类型的value,并指定此键值对对应的有效期。
在其他的设置方法中,不设置有效期,则代表其永久有效。
例如:
#设置wind的value是hot,并且设置时间为10秒,10秒之内有效,10秒过后,此键值对失效
127.0.0.1:6379> setex wind 10 hot
OK
127.0.0.1:6379> get wind
"hot"
127.0.0.1:6379> get wind
(nil)
(4)setrange
设置指定key的value值的子字符串
127.0.0.1:6379> set name djy@163.com
OK
127.0.0.1:6379> setrange name 4 gmail.com
(integer) 13
127.0.0.1:6379> get name
"djy@gmail.com"
(5)mset
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
127.0.0.1:6379> mset key1 djy1 key2 djy2 key3 djy3
OK
127.0.0.1:6379> get key2
"djy2"
127.0.0.1:6379> get key3
"djy3"
127.0.0.1:6379> get key1
"djy1"
(6)msetnx
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
127.0.0.1:6379> msetnx key1 djyisasmartguy key5 yes
(integer) 0
127.0.0.1:6379> get key5
(nil)
127.0.0.1:6379> get key1
"djy1"
只要有一个键没有设置成功,那么其他一起设置的键都不会设置成功。
(7)get
获取key对应的string值,如果key不存在返回nil。
      getset
设置key的新值,并返回key的旧值。
127.0.0.1:6379> getset key1 djyisasmartguy
"djy1"
127.0.0.1:6379> get key1
"djyisasmartguy"
(8)getrange
获取key的value值的子字符串。
127.0.0.1:6379> getrange key1 8 10
"art"
127.0.0.1:6379>
(9)mget
一次获取多个key的值,如果对应key不存在则对应返回nil。
127.0.0.1:6379> mget key1 key2
1) "djyisasmartguy"
2) "djy2"
(10)incr
自增溢,对key的值做加加操作,并返回新的值。
127.0.0.1:6379> set key5 10
OK
127.0.0.1:6379> incr key5
(integer) 11
(11)incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0。
#incrby key5 10是指增溢10次,如果是-10就是减10次
127.0.0.1:6379> incrby key5 10
(integer) 21
127.0.0.1:6379> get key5
"21"
(12)decr
对key的值做减减操作。
(13)decrby
同decr类似,减指定值。
127.0.0.1:6379> decr key5
(integer) 20
127.0.0.1:6379> decrby key5 6
(integer) 14
(14)append
给指定key的字符串追加value,返回新字符串值的长度。
127.0.0.1:6379> get key1
"djyisasmartguy"
127.0.0.1:6379> append key1 true
(integer) 18
127.0.0.1:6379> get key1
"djyisasmartguytrue"
(15)strlen
取指定key的value值的长度。
127.0.0.1:6379> strlen key1
(integer) 18
2:Hashes类型及操作:
Redis hash是一个string类型的field和value的映射表。它的添加,删除操作都是0(1)(平均)。Hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
  • hset

设置hash field为指定值,如果key不存在,则先创建。
127.0.0.1:6379> hset myhash field1 hello
(integer) 1
127.0.0.1:6379> hget myhash field1
"hello"
  • hsetnx

设置hash field为指定值,如果key不存在,则先创建。如果存在返回0。
127.0.0.1:6379> hsetnx myhash field1 helloyou
(integer) 0
  • hmset

同时设置hash的多个field。
127.0.0.1:6379> hmset myhash field2 helloyou field3 hellome
OK
127.0.0.1:6379> hmget myhash field2 field3
1) "helloyou"
2) "hellome"
  • hincrby

指定的hashfield加上给定值。
127.0.0.1:6379> hset myhash field4 30
(integer) 1
127.0.0.1:6379> hincrby myhash field4 10
(integer) 40
127.0.0.1:6379> hget myhash field4
"40"
127.0.0.1:6379>
  • hexists

测试指定field是否存在。
127.0.0.1:6379> hexists myhash field1
(integer) 1
  • hlen

返回指定hash的field数量。
127.0.0.1:6379> hlen myhash
(integer) 4
  • hdel

删除指定hash的field。
127.0.0.1:6379> hdel myhash field4
(integer) 1
127.0.0.1:6379>
  • hkeys

返回hash的所有field。
127.0.0.1:6379> hkeys myhash
1) "field1"
2) "field2"
3) "field3"
  • hvals

返回hash的所有value。
127.0.0.1:6379> hvals myhash
1) "hello"
2) "helloyou"
3) "hellome"
(10)hgetall
获取某个hash中全部的field和value。
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello"
3) "field2"
4) "helloyou"
5) "field3"
6) "hellome"

3:List类型及操作:
List是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中Key理解为链表的名字。
Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过puth,pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。
  对Redis的数据类型的介绍就到这里,还有两种数据类型,Set类型和Zset类型就不详细介绍了。

运维网声明 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-24805-1-1.html 上篇帖子: Redis数据库的学习与实践—安装与部署 下篇帖子: Redis数据库的学习与实践—Redis的常用命令及高级应用 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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