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

[经验分享] Redis数据类型之String类型和Hash类型

[复制链接]

尚未签到

发表于 2015-12-23 09:40:37 | 显示全部楼层 |阅读模式
Strings类型及操作
String是简单的类型,一个key对应一个value,string类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。
Set
设置key对应的值为string类型的value
例如:我们添加一个name=hy的键值对
127.0.0.1:6379> set name hy               
OK
127.0.0.1:6379> get name        
"hy"   
127.0.0.1:6379> set name lanmp        我们重新覆盖,会看到设置成功,再使用get发现值已经变了
OK
127.0.0.1:6379> get name                    是因为一个key对应一个value
"lanmp"
  
Setnx
设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思
  
例如:我们添加一个name=hy_new的键值对。
127.0.0.1:6379> setnx name hy_new        这时如果key存在则返回0,不更新
(integer) 0
127.0.0.1:6379> get name
"lanmp"
127.0.0.1:6379> setnx age 23                    如果不存在则返回1,并设置
(integer) 1
  
Setex
设置key对应的值为string类型的value,并指定此键值对应的有效期。
例如:我们添加一个haircolor=red的键值对,并且指定有效期为10秒
127.0.0.1:6379> setex haircolor 10 red
OK
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor        10秒后,我们会看到它的值为空,因为在10秒后这个键会失效
(nil)
127.0.0.1:6379> setnx haircolor red        可以设置,证明我们前面的设置已经失效了
(integer) 1
127.0.0.1:6379> get haircolor
"red"
  
Setrange
设置指定key的value值的子字符串
例如:我们希望将hy的163邮箱替换为qq邮箱
127.0.0.1:6379> set email yhai_ying@163.com
OK
127.0.0.1:6379> get email
"yhai_ying@163.com"
127.0.0.1:6379> setrange email 10 qq.com
(integer) 17
127.0.0.1:6379> get email
"yhai_ying@qq.comm" 替换完成后我们会发现最后面的一个m还存在,说明我们的替换是对应字符的替换
  
mset
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
127.0.0.1:6379> mset key1 hy1 key2 hy2 key3 hy3
OK
127.0.0.1:6379> get key1
"hy1"
127.0.0.1:6379> get key2
"hy2"
127.0.0.1:6379> get key3
"hy3"
  
msetnx
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
127.0.0.1:6379> msetnx key1 hello hy4 hy4 这里由于key1已经被设定了
(integer) 0 所以其他的值设定也会失败,返回0
127.0.0.1:6379> msetnx key6 hello hy4 hy4 我们设置不存在的值,就会返回1
(integer) 1

get
获取key对应的string值,如果key不存在返回nil。
  
getset
设置key的值,并返回key的旧值。
127.0.0.1:6379> getset key1 30
"hy1"
  
getrange
获取key的value值得子字符串。
127.0.0.1:6379> get email
"yhai_ying@qq.comm"
127.0.0.1:6379> getrange email 0 5
"yhai_y"
  
mget
一次获取多个key值,如果对应key不存在则对应返回nil。
127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "30"
2) "hy2"
3) "hy3"
4) "7"
5) (nil)
  
incr
对key的值做加操作,并返回新的值。
127.0.0.1:6379> incr key4
(integer) 8
127.0.0.1:6379> incr key4
(integer) 9
127.0.0.1:6379> get key4
"9"
  
incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0.
127.0.0.1:6379> incrby key4 5
(integer) 14
127.0.0.1:6379> get key4
"14"
127.0.0.1:6379> incrby key4 -5
(integer) 9
127.0.0.1:6379> get key4
"9"
  
decr对应着上面的incr来看,不过它是自减的
多key的值做减减操作。
127.0.0.1:6379> decr key4
(integer) 8
127.0.0.1:6379> get key4
"8"
  
dcrby 对应着上面的incrby来看,不过它是自减指定减的值
同decr类似,减指定值。
127.0.0.1:6379> decrby key4  3
(integer) 5
  
append
给指定key的字符串追加value,返回新字符串的长度。
127.0.0.1:6379> set name yhai_ying@163.com
OK
127.0.0.1:6379> get name
"yhai_ying@163.com"
127.0.0.1:6379> append name .cn
(integer) 20
127.0.0.1:6379> get name
"yhai_ying@163.com.cn"
  
strlen
取指定key的value值得长度。
127.0.0.1:6379> strlen name
(integer) 20
  
  
Hashes类型
Hashes类型及操作
Redis hash是一个string类型烦人field和value的映射表。它的添加、删除操作都是0(1)(平均)。Hash特别适合用于存储对象。相较于将对象存储在hash类型中会占用更少的内存,并且可以更方便的存取这个对象。
  
hset
设置hash field为指定值,如果key不存在,则先创建。
127.0.0.1:6379> hset user:001 name hy
(integer) 1
127.0.0.1:6379> hget user:001 name
"hy"
  
Hsetnx
设置hash field为指定值,如果key不存在,则先创建。如果存在返回0.
127.0.0.1:6379> hsetnx user:002 name hello
(integer) 1
127.0.0.1:6379> hsetnx user:002 name hy_new
(integer) 0
127.0.0.1:6379> hget user:002 name
"hello"
  
hmset
同样设置hash的多个field。
127.0.0.1:6379> hmset myhash field1 "hello1" field2 "hello2"
  
127.0.0.1:6379> hmset user:003 name hy age 24 sex 1
OK
127.0.0.1:6379> hget user:003 name
"hy"
127.0.0.1:6379> hget user:003 age
"24"
127.0.0.1:6379> hget user:003 sex
"1"
  
Hmget
获取全部指定的hash field。
127.0.0.1:6379> hmget user:003 name age sex
1) "hy"
2) "24"
3) "1"
  
Hincrby
指定的hash field加上给定值。
127.0.0.1:6379> hincrby user:003 age -8
(integer) 16
  
Hexists
测试指定field是否存在
127.0.0.1:6379> hexists user:003 age
(integer) 1
127.0.0.1:6379> hexists user:003 name
(integer) 1
127.0.0.1:6379> hexists user:003 sex
(integer) 1
  
hlen
返回指定hash的field数量。
127.0.0.1:6379> hlen user:003
(integer) 3
127.0.0.1:6379> hlen user:001
(integer) 1
  
hdel
删除指定hash的field。
127.0.0.1:6379> hdel user:003 age
(integer) 1
127.0.0.1:6379> hget user:003 age
(nil)
  
hkeys
返回hash的所有field。
127.0.0.1:6379> hkeys user:003
1) "name"
2) "sex"
  
hvals
返回hash的所有value。
127.0.0.1:6379> hvals myhash
127.0.0.1:6379> hvals user:003
1) "hy"
2) "1"
  
hgetall
获取某个hash中全部的field及value
127.0.0.1:6379> hgetall user:003
1) "name"
2) "hy"
3) "sex"
4) "1"
  
  

运维网声明 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-155079-1-1.html 上篇帖子: Redis数据类型之List类型 下篇帖子: Redis的介绍与安装部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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