一、五种数据类型
1.Redis字符串String
String 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据.
①.set设置指定的key的值

127.0.0.1:6379> set name mz
OK
127.0.0.1:6379> 

②.get获取指定的key的值

127.0.0.1:6379> get name
"mz"
127.0.0.1:6379> 

如果key不存在,返回nil

127.0.0.1:6379> get col
(nil)
127.0.0.1:6379> 

③.incr给指定的key值加一,返回一个加一之后的结果。

127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> 

④.incrby将 key 所储存的值加上给定的增量值

127.0.0.1:6379> incrby num 10
(integer) 21
127.0.0.1:6379> 

⑤.decr将key 中储存的数字值减一。

127.0.0.1:6379> decr num
(integer) 20
127.0.0.1:6379> 

⑥.decrby将 key 所储存的值减去给定的增量值

127.0.0.1:6379> decrby num 5
(integer) 15
27.0.0.1:6379> 

⑦.SETBIT key offset value

127.0.0.1:6379> setbit tom 100 1
(integer) 0
127.0.0.1:6379> 

⑧.getset key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

127.0.0.1:6379> getset num 0
"15"
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> 

思考:getset和incr结合有什么作用呢?
如果要设计一个复位的计数器,该如何使用呢?
如果某一个进程发生时,就会调用incr,当该进程结束时,完成get myCount 和set myCount 0.

127.0.0.1:6379> incr myCount 
(integer) 1
127.0.0.1:6379> incr myCount
(integer) 2
127.0.0.1:6379> getset myCount 0
"2"
127.0.0.1:6379> get myCount
"0"
127.0.0.1:6379> 

应用:计数器

计数器是 Redis 的原子性自增操作可实现的最直观的模式了,它的想法相当简单:每当某个操作发生时,向Redis 发送一个INCR 命令。
比如在一个 web 应用程序中,如果想知道用户在一年中每天的点击量,那么只要将用户 ID 以及相关的日期信息作为键,并在每次用户点击页面时,执行一次自增操作即可。
比如用户名是 peter ,点击时间是 2012 年 3 月 22 日,那么执行命令 INCR peter::2012.3.22 。
可以用以下几种方式扩展这个简单的模式:
• 可以通过组合使用INCR 和EXPIRE ,来达到只在规定的生存时间内进行计数 (counting) 的目的。
• 客户端可以通过使用GETSET 命令原子性地获取计数器的当前值并将计数器清零
• 使用其他自增/自减操作,比如DECR 和INCRBY ,用户可以通过执行不同的操作增加或减少计数器的值,比如在游戏中的记分器就可能用到这些命令。

2.redis哈希(hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
①.hset key fields
设置哈希表中的key对应的 filed和value

127.0.0.1:6379> hmset cat name "tom" color "red" age "12"
OK
127.0.0.1:6379>

②.hget key field
获取哈希表中key的字段值

  127.0.0.1:6379> hget cat name
  "tom"
  127.0.0.1:6379> 

③.hlen key
获取哈希表中字段的数量
127.0.0.1:6379> hlen cat
(integer) 3
127.0.0.1:6379>

④.hkeys key
获取该哈希表中所有的filed

127.0.0.1:6379> hkeys cat
1) "name"
2) "color"
3) "age"
127.0.0.1:6379> 

⑤.hvals key 获取哈希表中所有值

127.0.0.1:6379> hvals cat
1) "tom"
2) "red"
3) "12"
127.0.0.1:6379> 

3.redis列表(list)
①.lpush key value
将一个或多个值插入到列表头部
key后面的value可以是多个

127.0.0.1:6379> lpush username xm
(integer) 1
127.0.0.1:6379> lpush username xg
(integer) 2
127.0.0.1:6379> lpush username zg
(integer) 3
127.0.0.1:6379> lpush username we we
(integer) 5
127.0.0.1:6379> 

②.lrange key start end
取出给定索引范围的列表值

127.0.0.1:6379> lrange username 0 7
1) "we"
2) "we"
3) "zg"
4) "xg"
5) "xm"

注:后面那个索引超出也没有关系,redis会自动处理,会取出在哪个范围内的所有值
看完有什么发现呢?是不是觉得跟栈的特点很相似,先进后出。
③.lpop key
移除并获取列表中的第一个元素

127.0.0.1:6379> lpop username
"we"
127.0.0.1:6379> lrange username 0 10
1) "we"
2) "zg"
3) "xg"
4) "xm"
127.0.0.1:6379> 

④.通过索引获取
获取指定索引处的值,如果该索引处没有值,则返回nil

127.0.0.1:6379> lindex username 5
(nil)
127.0.0.1:6379> lindex username 4
"xm"
127.0.0.1:6379> 

⑤.rpop key
移除列表的最后一个元素,返回值为移除的元素。

127.0.0.1:6379> rpop username
"xm"
127.0.0.1:6379> lrange username 0 10
1) "we"
2) "zg"
3) "xg"
127.0.0.1:6379> 

应用:

双十一秒杀
最新消息的排行

4.redis集合set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

①.lpush key value

127.0.0.1:6379> lpush username weh
(integer) 5
127.0.0.1:6379> sadd animal dog
(integer) 1
127.0.0.1:6379> sadd animal pig
(integer) 1
127.0.0.1:6379> sadd animal cat
(integer) 1
 127.0.0.1:6379> sadd animal cat
(integer) 0
127.0.0.1:6379> smembers animal
1) "pig"
2) "dog"
3) "cat"
127.0.0.1:6379> 

发现什么了吗?和Java中的set类似,无序不能重复

②.scard key 获取集合的成员数

127.0.0.1:6379> scard animal
(integer) 5
127.0.0.1:6379> 

③.smembers key返回集合中的所有成员

127.0.0.1:6379> smembers animal
1) "sheep"
2) "pig"
3) "dog"
4) "cat"
5) "tiger"

④.spop key
移除并返回集合中的一个随机元素

127.0.0.1:6379> spop animal
"dog"
127.0.0.1:6379> smembers animal
 1) "cat"
 2) "pig"
 3) "sheep"
 4) "tiger"
127.0.0.1:6379> 

⑤.SISMEMBER key member
判断 member 元素是否是集合 key 的成员

 127.0.0.1:6379> sismember animal cat
 (integer) 1
 127.0.0.1:6379> sismember animal jj
 (integer) 0
 127.0.0.1:6379> 

是返回1,否则,返回0
⑥.sinter key1 key2
求集合中的交集

127.0.0.1:6379> sadd dog a b c d f g h
(integer) 7
127.0.0.1:6379> sadd pig a b c d m l o
(integer) 7
127.0.0.1:6379> sinter dog pig
1) "d"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379> 

⑦.sinterstore newkey key1 key2
返回集合中的交集,并存放到新的集合中

127.0.0.1:6379> sinterstore my dog pig
(integer) 4
127.0.0.1:6379> smembers my
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> 

应用:

每一个人的QQ好友都存放到一个集合中,这样求两个人共同好友的,只需求出交集即可。

5.redis有序集合sorted set
sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。和 set 一样 sorted set 也是 string 类型元素的集合,不同的是每个元素都会关联一个 double类型的 score。sorted set 的实现是 skip list 和 hash table 的混合体。
当元素被添加到集合中时,一个元素到 score 的映射被添加到 hash table 中,所以给定一个元素获取 score 的开销是 O(1),另一个 score 到元素的映射被添加到 skip list,并按照 score 排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是 O(log(N))和 skip list 的开销一致,redis 的 skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set 最
经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为 score 存储,对象的 id当元素存储。

以某一个条件为权重,进行排序。

①.zadd key scores members
向名称为 key 的 zset 中添加元素 member,score 用于排序。如果该元素已经存在,则根据score 更新该元素的顺序

127.0.0.1:6379> zadd myaset 1 one
(integer) 1
127.0.0.1:6379> zadd myaset 2 two
(integer) 1
127.0.0.1:6379> zadd myaset 5 three
(integer) 1
127.0.0.1:6379> zadd myaset 6 three
(integer) 0
127.0.0.1:6379> zrange myaset 0 6 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "6"
127.0.0.1:6379> 

我们可以看到three被设置了两次,以最后一次为准

②.zrem
删除名称为 key 的 zset 中的元素 member

127.0.0.1:6379> zrange myaset 0 6 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "6"
127.0.0.1:6379> zrem myaset one
(integer) 1
127.0.0.1:6379> zrange myaset 0 6 withscores
 1) "two"
 2) "2"
 3) "three"
 4) "6"
127.0.0.1:6379> 

two被删除

③. zincrby

如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment

127.0.0.1:6379> zrange myaset 0 6 withscores
1) "two"
2) "2"
3) "three"
4) "6"
127.0.0.1:6379> zincrby myaset 3 three
"9"
127.0.0.1:6379> 

three由3增加到了9
④.zrank
返回名称为 key 的 zset 中 member 元素的排名(按 score 从小到大排序)即下标

127.0.0.1:6379> zrank myaset two
(integer) 0
127.0.0.1:6379> zrank myaset three
(integer) 1
127.0.0.1:6379> 

注意:返回的是索引,不是score

⑤. zrevrank
返回名称为 key 的 zset 中 member 元素的排名(按 score 从大到小排序)即下标

127.0.0.1:6379> zrevrange myaset 0 10 withscores
1) "three"
2) "9"
3) "two"
4) "2"
127.0.0.1:6379> 

⑥.zcount
返回集合中 score 在给定区间的数量

127.0.0.1:6379> zcount myaset 1 10
(integer) 2
127.0.0.1:6379> 

应用:

搜索商品时按照价格排序

二.键值命令

  1. keys *
    返回所有key

    127.0.0.1:6379> keys *
     1) "color"
     2) "a"
     3) "mz"
     4) "my"
     5) "x"
     6) "name"
     7) "customer"
     8) "dog"
     9) "username"

    2.keys w*
    取出以w开头的key

     127.0.0.1:6379> keys w*
     1) "wan"
     2) "weh"
     127.0.0.1:6379> 

    3.exists key
    是否存在该键
    4.del key
    删除指定的键

    127.0.0.1:6379> exists wan
     (integer) 1
    127.0.0.1:6379> del wan
    (integer) 1
    127.0.0.1:6379> exists wan
    (integer) 0
    127.0.0.1:6379> 

    5.expire
    设置过期时间(单位:秒)

    127.0.0.1:6379> expire debt 15
    (integer) 1
    127.0.0.1:6379> ttl debt
    (integer) 9
    127.0.0.1:6379> ttl debt
    (integer) 2
    127.0.0.1:6379> ttl debt
    (integer) -2
    127.0.0.1:6379> 

    设置debt这个key的过期时间是15秒,然后我们不断的用ttl 来获取这个
    key 的有效时长,直至为-2 说明此值已过期
    6.move
    将当前数据库中的 key 转移到其它数据库中

    127.0.0.1:6379> select 0
    OK
    127.0.0.1:6379> set bus 1
    OK
    127.0.0.1:6379> move bus 2
    (integer) 1
    127.0.0.1:6379> select 2
    OK
    127.0.0.1:6379[2]> get bus
    "1"
    127.0.0.1:6379[2]> 

    7.移除给定 key 的过期时间

    127.0.0.1:6379[2]> expire bus 100
    (integer) 1
    127.0.0.1:6379[2]> ttl bus
     (integer) 83
    127.0.0.1:6379[2]> persist bus
    (integer) 1
    127.0.0.1:6379[2]> ttl bus
    (integer) -1
    127.0.0.1:6379[2]> 

    8.randomkey
    随即返回一个key

    127.0.0.1:6379> randomkey
    "s"
    127.0.0.1:6379> randomkey
    "myCount"
    127.0.0.1:6379> randomkey
    "dog"
    127.0.0.1:6379> 

9.rename
重命名key

 127.0.0.1:6379> rename s dg
 OK
 127.0.0.1:6379> 

三、服务相关
1.ping
测试连接是否成功

 127.0.0.1:6379> ping
  PONG
 127.0.0.1:6379> 

2.quit
退出

3.dbsize
返回数据库中的key的数目

 127.0.0.1:6379> dbsize
 integer) 26
 127.0.0.1:6379> 

4.flushdb
删除当前库的所有key
5.flushall
删除所有数据库的key
6.select 库的索引
redis有16个数据库,默认都存在0号库

redis常用命令手册大全的更多相关文章

  1. Redis常用命令手册:服务器相关命令

    Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如各类语言包,这些命令都有对应的方法.下面将Redis提供的命令做一 ...

  2. Redis 常用命令 大全

    Redis 常用命令 发现几个很好的 Redis 常用命令汇总大全网页,分享给小伙伴们~ 1.Redis 命令参考 http://redisdoc.com/string/index.html 2.W3 ...

  3. Redis快速起步及Redis常用命令大全

    本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的 ...

  4. 思科、华为、H3C常用命令对比大全

    思科.华为.H3C这些网络设备的命令还是挺多的,不过我们一般用的路由交换机设备都是最简单的了,先学基本命令,再学其他功能命令.路由命令是最基本的命令了. 思科.华为.H3C常用命令对比大全    CI ...

  5. Redis常用命令

    Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ...

  6. 第2讲 Redis常用命令与高级应用

    目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...

  7. UBoot常用命令手册

    UBoot常用命令手册 U-Boot还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明. 1.bootm bootm ...

  8. [置顶] linux常用命令手册

    前言:整理了一份linux常用命令手册,与大家分享.这是一些比较常用的命令. 我已经整理成一份PDF带书签的手册,可以到CSDN免费下载. 下载地址:http://download.csdn.net/ ...

  9. Linux常用命令手册

    Linux常用命令手册 NO 分类 PS1 命令名 用法及参数 功能注解 对应章节 1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件     文件管理 # ls ls ...

随机推荐

  1. CME Futures & Options Order Book

    http://algo-logic.com/futures-options-orderbook Algo-Logic Systems’ Futures & Options (F&O) ...

  2. arduino控制A9G发送短信

    #include<SoftwareSerial.h> #define phonenum_call "18150561160" // 最好移动卡 联通卡支持度不是很好 S ...

  3. Unity S老师系列课程学习

    AssetBundle(创建打包)入门学习(基于Unity2017) (已看) 分组策略 逻辑实体分组 按照类型分组 按照使用分组 分组策略----总结 把经常更新的资源放在一个单独的包里面,跟不经常 ...

  4. Asp.Net Core AsyncLocal 异步上下文

    引子 阅读以下代码,并尝试分析 代码解析 在主线程中,线程Id为1,为线程变量赋值 变量==d6ff 开启一个新的task,此时线程Id为4,变量==d6ff,并调用Task1 开启一个同步Task3 ...

  5. Java实现字符串反转【Leetcode】

    Write a function that reverses a string. The input string is given as an array of characters char[]. ...

  6. 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务

    前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock   ht ...

  7. 基于仿射的非刚体配准方法(i) 法向

    为啥闲呢,因为work干完了. 为啥补档呢,因为有新work了. 呃,因为新work让人自闭. 我现在干完了两部分.一是把最近邻的部分迁移过来. 二是求法向. 首先是给三个点,就能确定平面——因为是三 ...

  8. ASP.NET Core appsettings.json 文件

    ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...

  9. C# vb .NET生成QR二维码

    二维码比条形码具有更多优势,有些场合使用二维码比较多,比如支付.通过将某些数据生成二维码,就可以实现一码走天下.那么如何在C#,.Net平台代码里生成二维码呢?答案是使用SharpBarcode! S ...

  10. Flask笔记:文件上传

    文件上传 enctype:在HTML中的form表单中form标签默认是`enctype="application/x-www-form-urlencoded"`,在文件上传时需要 ...