Redis相比其他key-value类型的数据库来说有其特有的优势,其中两点比较突出的就是支持数据持久化和支持各种复杂的数据结构。
本文就来简单介绍下Redis 3.0支持的数据类型,以及各个数据类型支持的一些常见操作,所以演示都以redis-cli工具来演示。
目前Redis 3.0支持的数据类型有:
1.strings——Binary-safe strings
2.Lists——集合中的字符串元素顺序是由元素插入的顺序决定的,这种类型我们通常称之为链表
3.Sets——集合中的字符串元素是唯一的且无序的
4.Sorted sets——类似于Sets类型但是集合中每个元素都会关联一个浮点数(称之为score),并且按照元素对应的score进行排序
5.Hashes——该类型被映射成一组字段和字段值组成,非常适合存储对象
6.Bit arrays (or simply bitmaps)——该类型主要针对bit数组的操作
7.HyperLogLogs——一种概率类型的数据结构,主要用于评估集合的基数

Reis Strings

1.set和get命令——设置和获取一个string value
1.1 基本用法
[rdsusr01@vm1 ~]$ redis-cli -h 192.168.157.128 -p 16379
192.168.157.128:16379> set name sohoboy
OK
192.168.157.128:16379> get name
"sohoboy"
192.168.157.128:16379> set name kickboy
OK
192.168.157.128:16379> get name
"kickboy"
注:set命令会覆盖已存在的key中的value,即使这个key用一个non-string value关联。

1.2 set命令的参数
set key nx:key如果已存在,那么设置key的动作将失败
set key xx:key如果已存在,那么设置key的动作将成功
192.168.157.128:16379> get name
"kickboy"
192.168.157.128:16379> set name oldboy nx
(nil)
192.168.157.128:16379> get name
"kickboy"
192.168.157.128:16379> set name oldboy xx
OK
192.168.157.128:16379> get name
"oldboy"

2.incr命令——将string value解析成一个整数,然后在此基础上加1
类似的命令还有decr,increby,decrby,incr和decr功能相反,*by的增加/减少的数量可以指定
192.168.157.128:16379> set count 3
OK
192.168.157.128:16379> incr count
(integer) 4
192.168.157.128:16379> incr count
(integer) 5
192.168.157.128:16379> get count
"5"
192.168.157.128:16379> incrby count 25
(integer) 30
192.168.157.128:16379> get count
"30"
192.168.157.128:16379> decr count
(integer) 29
192.168.157.128:16379> get count
"29"
192.168.157.128:16379> decrby count 9
(integer) 20
192.168.157.128:16379> get count
"20"

3.mset和mget命令——一次性设置和获取多个key的value
192.168.157.128:16379> mset db1 oracle db2 mysql db3 mongodb db4 redis
OK
192.168.157.128:16379> mget db1 db2 db3 db4
1) "oracle"
2) "mysql"
3) "mongodb"
4) "redis"

4.通用命令——exists,del,type,这些命令不局限于Redis String类型的key
exists:指定的key如果存在则返回1,不存在返回0
del:删除一个key以及key关联的value
type:返回key中存储的value的类型
192.168.157.128:16379> exists name
(integer) 1
192.168.157.128:16379> type name
string
192.168.157.128:16379> del name
(integer) 1
192.168.157.128:16379> exists name
(integer) 0

5.expire和ttl命令——设置key的过期时间以及检查key的存活时间,单位是秒
192.168.157.128:16379> set name sohoboy
OK
192.168.157.128:16379> expire name 10
(integer) 1
192.168.157.128:16379> ttl name
(integer) 7
192.168.157.128:16379> ttl name
(integer) 3
192.168.157.128:16379> ttl name
(integer) -2
192.168.157.128:16379> get name
(nil)

6.pexpire和pttl命令——设置key的过期时间以及检查key的存活时间,单位是毫秒
192.168.157.128:16379> set name oldboy
OK
192.168.157.128:16379> pexpire name 9855
(integer) 1
192.168.157.128:16379> pttl name
(integer) 7113
192.168.157.128:16379> pttl name
(integer) 5096
192.168.157.128:16379> pttl name
(integer) 3551
注:这里在补充几个相关的命令和参数
persist:去掉设置了过期时间的key,使其持久化
set key ex:设置key的超时时间,单位是秒
set key px:设置key的超时时间,单位是毫秒
192.168.157.128:16379> set name oldboy ex 11
OK
192.168.157.128:16379> ttl name
(integer) 8
192.168.157.128:16379> ttl name
(integer) 5
192.168.157.128:16379> set name oldboy px 8933
OK
192.168.157.128:16379> pttl name
(integer) 5175
192.168.157.128:16379> pttl name
(integer) 4018
192.168.157.128:16379> persist name
(integer) 1

7.getrange和setrange命令——返回key的子串和重写key的子串
192.168.157.128:16379> set slogan "I am a handsome man"
OK
192.168.157.128:16379> get slogan
"I am a handsome man"
192.168.157.128:16379> getrange slogan 7 -5
"handsome"
192.168.157.128:16379> getrange slogan 30 -2
""
192.168.157.128:16379> getrange slogan 0 100
"I am a handsome man"
192.168.157.128:16379> setrange slogan -3 woman
(error) ERR offset is out of range
192.168.157.128:16379> get slogan
"I am a handsome man"
192.168.157.128:16379> setrange slogan 7 glamour
(integer) 19
192.168.157.128:16379> get slogan
"I am a glamoure man"
192.168.157.128:16379> setrange slogan 30  yes
(integer) 33
192.168.157.128:16379> get slogan
"I am a glamoure man\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00yes"

8.getbit和setbit命令——获取和设置key中存储的string value对应的offset的bit
192.168.157.128:16379> set word a
OK
192.168.157.128:16379> getbit word 1
(integer) 1
192.168.157.128:16379> getbit word 0
(integer) 0
192.168.157.128:16379> getbit word 3
(integer) 0
192.168.157.128:16379> getbit word 7
(integer) 1
192.168.157.128:16379> getbit word 8
(integer) 0
192.168.157.128:16379> bitcount word
(integer) 3
192.168.157.128:16379> setbit word 3 1
(integer) 0
192.168.157.128:16379> getbit word 3
(integer) 1
192.168.157.128:16379> setbit word 3 0
(integer) 1
注:字符"a"对应的二进制位是"1100001"
至此关于Redis Strings类型的key的一些常用操作介绍到这,下面的文章会陆续介绍其他数据类型。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20801486/viewspace-1872810/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20801486/viewspace-1872810/

小丸子学Redis系列之——Data types(一)相关推荐

  1. 小丸子学Hadoop系列之——部署Hbase集群

    0.集群规划 主机名 ip地址 安装的软件 运行的进程 AI-OPT-HBS01 10.46.52.30 hadoop,hbase namenode,zkfc,resourcemanager AI-O ...

  2. 小丸子学MongoDB系列之——部署MongoDB副本集

    1.以副本集的方式启动mongodb实例 1.1 创建副本集目录 [mgousr01@vm1 ~]$ mkdir -p mongorep/{mg17/{bin,conf,data,logs,pid}, ...

  3. 小丸子学Docker系列之——实战Dockerfile

     这次研究下Docker的Dockerfile,通过Dockerfile来定制化和自动build自己的image,本次要实现的需求是定制一个包含Mysql,Mongodb,Redis三种数据库服务的镜 ...

  4. 小丸子学Docker系列之——安装Docker及基本命令的使用

    环境要求: 在Centos7.x上安装docker官方要求内核至少是3.10 1.查看内核和操作系统版本 [root@docker-machine ~]# uname -r 3.10.0-327.el ...

  5. 小丸子学MongoDB系列之——安装MongoDB

    1.下载MongoDB3.0软件包并解压 [root@vm1 ~]# cd /appbase/apps [root@vm1 ~]# rz [root@vm1 ~]# tar xzvf mongodb- ...

  6. 小丸子学Hadoop系列之——hbase备份与恢复

    1.使用distcp冷备hbase --查看原始数据 [hdpusr01@hadoop1 bin]$ hbase shell SLF4J: Class path contains multiple S ...

  7. 小丸子学Oracle 12c系列之——Oracle Pluggable Database

    好久没有研究Oracle了,最近觉得有必要研究下Oracle 12c的新特性,下面主要是记录我在学习Oracle 12c新特性之pdb的相关内容. 1.Oracle Pluggable Databas ...

  8. Redis Essentials 读书笔记 - 第二章: Advanced Data Types (Earning a Black Belt)

    Chapter 2. Advanced Data Types (Earning a Black Belt) 本章介绍数据类型:Set, Sorted Set, Bitmap, HyperLogLog. ...

  9. 吃透Redis系列(五):RDB和AOF持久化详细介绍

    Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...

最新文章

  1. linux 邮件中继转发,linux – 如何使sendmail中继本地邮件?
  2. MySQL数据库-完全备份及恢复
  3. 网站网页编写需要注意哪些问题?
  4. 把Zend Studio 5.5改为简体中文版的办法
  5. 解决使用CoreData时报duplicate symbol错误问题
  6. maven占位符$变量无法替换
  7. django媒体文件上传设置
  8. ue4集合类型_UE4项目问题集合
  9. 百度地图infowindow的close事件_高德地图,百度地图,腾讯地图哪个更准?
  10. 微软商业智能和分析平台高歌猛进,一骑绝尘,成为当之无愧BI分析平台的领导者
  11. vue获取编辑器纯文字_vue中使用富文本编辑器
  12. # 根据三边求角度_七年级数学:怎么求旋转射线构成的角度?掌握这种方法口算出结果...
  13. 错过就找不到了 Java API文档 免费下载!!!
  14. Clouder专项技能认证课程:网站建设——部署与发布
  15. (附代码)手写滑动验证码,完整代码开放
  16. jsp小区停车位管理系统
  17. ColorOS 13流畅吗?看OPPO在系统上做了哪些升级?
  18. Tcp通讯错误代码10061
  19. 教你搭建个人/企业私有云盘-seafile
  20. matlab近似计算求积分,matlab 实验二 定积分的近似计算

热门文章

  1. 1. Python环境搭建
  2. 金融机构业务连续性管理
  3. 史上最全的用Python操控手机APP攻略!建议收藏!
  4. QT在界面背景图设置后运行显示黑屏
  5. UI基础三:简单的BOL报表开发
  6. 从PDF直接复制粘贴过来可以吗?其他软件的数据怎么导入Excel?
  7. 1.MySQL数据库 2.SQL语句
  8. 转自g+,一个有意思的故事
  9. Satellite卫星遥感图像中小物体的分割识别
  10. 【Unity】碰撞检测