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

[经验分享] 3:redis的数据类型及操作

[复制链接]

尚未签到

发表于 2016-12-18 10:46:56 | 显示全部楼层 |阅读模式
  1: redis的是key-value 数据库,value的数据类型有:

Lists (列表)

Sets (集合)

Sorted sets (有序集合)

Hashes (哈希表)

键值的数据类型决定了该键值支持的操作。Redis 支持诸如列表、集合或有序集合的交集、

并集、查集等高级原子操作;同时,如果键值的类型是普通数字,Redis 则提供自增等原子

操作。


2: strings 类型及操作

 exists ljq  //判断建是否存在 0 不存在 1

redis 127.0.0.1:6378> set ljq ljq
OK
redis 127.0.0.1:6378> get ljq
"ljq"
redis 127.0.0.1:6378> del ljq
(integer) 1
redis 127.0.0.1:6378> exists ljq

   setnx ljq jljl // key存在, 不修改value,返回0
  setex hello 10 red //set的value存在10s

redis 127.0.0.1:6378> get ljq
"ljq123"
redis 127.0.0.1:6378> setnx ljq jljl
(integer) 0
redis 127.0.0.1:6378> get ljq
"ljq123"
redis 127.0.0.1:6378> setex hello 10 red
OK
redis 127.0.0.1:6378> get hello
"red"
redis 127.0.0.1:6378> get hello
"red"
redis 127.0.0.1:6378> get hello
(nil)

  setrange name 4 gmail,com // 范围修改 从1开始
  mset h1 ljq1 h2 ljq2 // set多个
  mset h1 ljqh1 h2 ljq222 // 修改多个
  mget h1 h2 //获取多个key的值
  getrange name 0 2 // 范围获取

redis 127.0.0.1:6378> get name
"ljq@qq.com"
redis 127.0.0.1:6378> setrange name 4 gmail,com
(integer) 13
redis 127.0.0.1:6378> get name
"ljq@gmail,com"
redis 127.0.0.1:6378> mset h1 ljq1 h2 ljq2
OK
redis 127.0.0.1:6378> get h1
"ljq1"
redis 127.0.0.1:6378> get h2
"ljq2"
redis 127.0.0.1:6378> mset h1 ljqh1 h2 ljq222
OK
redis 127.0.0.1:6378> get h1
"ljqh1"
redis 127.0.0.1:6378> get h2
"ljq222"
redis 127.0.0.1:6378> getset name
(error) ERR wrong number of arguments for 'getset' command
redis 127.0.0.1:6378> getset name
(error) ERR wrong number of arguments for 'getset' command
redis 127.0.0.1:6378> get name
"ljq@gmail,com"
redis 127.0.0.1:6378> getset name ljss
"ljq@gmail,com"
redis 127.0.0.1:6378> get name
"ljss"

 
原子操作

incr age //原子操作  加1

incrby age 6 //原子操作  加6

redis 127.0.0.1:6378> set age 12
OK
redis 127.0.0.1:6378> incr age
(integer) 13
redis 127.0.0.1:6378> incr age
(integer) 14
redis 127.0.0.1:6378> incr age
(integer) 15
redis 127.0.0.1:6378> incr age
(integer) 16
redis 127.0.0.1:6378> get age
"16"
redis 127.0.0.1:6378> incrby age 6
(integer) 22
redis 127.0.0.1:6378> get  age
"22"
redis 127.0.0.1:6378> decr age
(integer) 21
redis 127.0.0.1:6378> decr age
(integer) 20
redis 127.0.0.1:6378> decrby 6
(error) ERR wrong number of arguments for 'decrby' command
redis 127.0.0.1:6378> decrby age 6
(integer) 14

 

redis 127.0.0.1:6378> get name
"ljss"
redis 127.0.0.1:6378> append name @qq.com
(integer) 11
redis 127.0.0.1:6378> get name
"ljss@qq.com"
redis 127.0.0.1:6378> strlen name
(integer) 11
redis 127.0.0.1:6378> get age
"14"
redis 127.0.0.1:6378> strlen age
(integer) 2

 

 2: hashes类型及操作


redis的hashes是key-value键值对, 特别适合用于存储对象。相较于将对象的每个字段存成单个 string 类型。


将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新


建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。这个 zipmap 其实并不

是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据

存储开销。尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field 或者 value的大小超出一定限制后,


Redis 会在内部自动将 zipmap 替换成正常的 hash 实现. 这个限制可以在配置文件中指定


hash-max-zipmap-entries 64 #配置字段最多 64 个,

hash-max-zipmap-value 512 #配置 value 最大为 512 字节

 1: hset, hget  
redis 127.0.0.1:6378> hset testhash key1 value1
(integer) 1
redis 127.0.0.1:6378> hget testhash key1
"value1"
redis 127.0.0.1:6378>

 2:hsetnx


redis 127.0.0.1:6378> hsetnx testhash key1 ljq
(integer) 0
redis 127.0.0.1:6378> hget testhash key1
"value1"
redis 127.0.0.1:6378>
 3:hmset, hmget   set多个取多个


redis 127.0.0.1:6378> hmset myhash key1 vlaue1 key2 value2
OK
redis 127.0.0.1:6378> hmget myhash key1 key2
1) "vlaue1"
2) "value2"

 4:hincrby 原子加


redis 127.0.0.1:6378> hset inhash key1 20
(integer) 1
redis 127.0.0.1:6378> hincr inhash key1
(error) ERR unknown command 'hincr'
redis 127.0.0.1:6378> hincrby inhash key1 5
(integer) 25

 5:[size=1em]hexists, [size=1em]hlen 计算里面field的数量


   
redis 127.0.0.1:6378> hexists myhash key1
(integer) 1
redis 127.0.0.1:6378> hget myhash key1
"vlaue1"
redis 127.0.0.1:6378> hlen myhahs key1
(error) ERR wrong number of arguments for 'hlen' command
redis 127.0.0.1:6378> hlen myhah key1
(error) ERR wrong number of arguments for 'hlen' command
redis 127.0.0.1:6378> hlen myhash
(integer) 2

 6: hdel删除一个key


redis 127.0.0.1:6378> hlen myhash
(integer) 3
redis 127.0.0.1:6378> hlen myhash key2
(error) ERR wrong number of arguments for 'hlen' command
redis 127.0.0.1:6378> hdel myhash key2
(integer) 1
redis 127.0.0.1:6378> hlen myhash
(integer) 2

 7:获得所有的key 和value


redis 127.0.0.1:6378> hkeys myhash
1) "key1"
2) "key3"
redis 127.0.0.1:6378> hvals myhash
1) "vlaue1"
2) "value3"
redis 127.0.0.1:6378> hgetall myhash
1) "key1"
2) "vlaue1"
3) "key3"
4) "value3"

 


 

运维网声明 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-315932-1-1.html 上篇帖子: redis学习笔记之环境搭建 下篇帖子: redis lua脚本测试功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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