redis是已知的性能最快的key-value 数据库。

1.key相关命令

exists key :检查指定的key是否存在 1表示存在 0表示不存在

del key1,key2,key3....:删除指定的key,返回删除key的个数,如果key都不存在返回0

type key :返回给的key的value的类型。返回none表示key不存在,string表示字符串,list表示链表,set表示无序集合...

keys pattern :返回匹配指定模式的所有key

expire key seconds:设置给定key的过期时间

randomkey:返回从当前数据库中随机选择的一个key,如果当前数据库是空的返回空串

rename oldkey newkey :重命名key,如果newkey存在则覆盖,返回1表示成功,0失败。若失败则可能oldkey不存在或者和newkey相同

renamenx oldkey newkey :同上如果newkey存在返回失败

ttl key :返回设置的过期时间key的剩余的秒数,-1表示key不存在或者没有设置过期时间

move key db-index: 将key从当前数据库移动到指定数据库。返回1成功,0表示key不存在或已经在指定的数据库中

案例:

2.数据类型

redis支持多种数据类型,例如:string,list,set,sorted set,hash等。每种数据类型都有其各自的特点。

1.string类型

string类型是二进制安全的,可以把图片和视频文件保存到string中,定义如下

struct sdshdr{
long len;
long free;
char buf[];
}

buf数组:字符串的实体,保存字符串的内容

len字段:记录buf数组大小

free字段;记录buf数组还有多少空间

因为有len和free记录字符串信息,所以不必使用nil字符作为结束,从而实现二进制安全。为了提高网站的运行速度可以使用string类型存储一些静态文件例如图片,css,js等。

string命令:

set key value :设置key对应的string值,返回1成功,0失败

setnx key value :如果key不存在则设置,如果key已存在返回0

get key : 获取key对应的string值 如果key不存在返回nil

getset key value :先获取key的值,再设置key的值,如果key不存在返回nil

mget key1,key2... :一次获取多个key的值,如果对应的key不存在返回nil

mset key1 values1 key2 values2 ... :一次设置多个key成功放回1 ,失败返回0 表示都没有设置

msetnx  key1 values1 key2 values2 ...:一次设置多个key,但不会覆盖已存在的

incr key : 向key对应的value加1,并返回新值,注意该key的值必须是int类型 否则返回错误 ,如果key 不存在则设置key 为1

decr key : 向key对应的value做-1,并返回新值,注意该key的值必须是int类型 否则返回错误 ,如果key 不存在则设置key 为-1

incrby key integer : 向key对应的值加上一个指定的整数,key不存在则新建一个,并认为原来的值是0

decrby key interger :向key对应的值减去一个指定的整数,key不存在则新建一个,并认为原来的值是0

案例:

3.list类型

list数据类型指key对应value是一个双向链表结构,所以list类型提供链表支持的所有操作。list类型在互联网引用中非常有用,例如存放微博中‘我关注的列表’,或者论坛中所有回帖ID。

list命令:

lpush key string :向key对应的list头部添加一个字符串元素,成功返回1,失败返回0

rpush key string :向key对应的list尾部添加一个字符串元素,成功返回1,失败返回0

llen key :返回key对应list的长度,如果key不存在返回0,如果key对应的类型不是list返回错误。

lrange key start end :返回指定区间内(start~~end)的元素,下表从0开始,负值表示从链表尾部开始计算,-1表示倒数第一个,key不存在返回空列

ltrim key start end :截取list指定区间内(start~~end)元素,成功返回1,key不存在返回错误

lset key index value :设置list中指定下表的元素,成功返回1,key或者下表不存在返回错误。

lrem key count value : 从list 头部(count正数)或尾部(count负数)删除一定数量(count绝对值)的匹配value的元素,返回删除元素的数量,count为0时表示全部删除。

lpop key : 从list头部删除并返回删除的元素。如果key对应的list不存在或者是空返回nil,如果key对应的值不是list返回错误

rpop :从list 尾部删除元素并返回

blpop key1 key2 ... timeout  :从左到右扫描key1···key2 ,返回对第一个非空list进行lpop操作并返回。如果所有list都是空或不存在,阻塞timeout秒,timeout为0表示一直阻塞。阻塞时,如果有其他client对key1...key2 中任意一个key进行push炒作,阻塞解除并返回。如果超时发生,则返回nil

brpop key..key2  timeout 功能与plpop类似,不同的是blpop从头删除 而brpop是从尾部删除

案例:

使用list可以实现消息列队功能,减去数据库压力。消息列队类似于实现生活中的排队,每次有消息到达时就把消息放入列队尾部,取出消息时头部取出。要有那个list实现消息列队,先用rpush命令吧消息列队放入尾部,然后使用lpop命令把消息列队从头部取出。

4.set类型

set数据类型是一种无序集合,在redis内部通过hashtable实现,查找和删除元素的时间复杂度为O(1).set数据类型的优点是快速查找元素是否存在,用于记录一些不能重复的数据。例如,在网站注册账号时用户名不能重复,使用set记录注册用户,如果注册的用户已经存在set中,则拒绝注册。

set命令:

sadd key member :添加一个strimg元素到key对应的set集合中,成功返回1,如果元素在集合中返回0 ,key对应的set不存在返回错误

srem key member :从key对应set中移除给定的元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型返回错误

spop key :删除并返回key对应set中随机的一个元素,如果set是空或者key对应的set不存在返回nil

srandmember key: 同spop 随机取出一个元素,但不删除该元素

smove srckey dstkey member :从srckey 对应set中移除member并添加到dstkey对用的set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key对应的不是set类型,返回错误

scard key :返回set元素的个数,如果set是空或者key不存在返回0

sismember key member :判断member 是否在set中,存在返回1,不存在或者key对应的set集合不存在返回0

sinter  key1,key2,key3... : 返回所有给定的key的交集

sinterstore dstkey key1,key2.... :同sinter,同时将交集存到dstkey对应的set集合中

sunion key1 key2 ... : 返回所有key的并集

sunionstore  dstkey key1,key2.... :同sunion ,同时将并集存到dstkey对应的set集合中

sdiff key1 key2 key3 ... :返回给定key的差集

sdiffstore dstkey key1 key2 key3...:同sdiff ,同时将差集存到dstkey对应的set集合中

smembers key 返回key对应set的所有元素,结果是无序的

案例:

set类型通常还可以用来记录做过某些事。例如投票系统,每个用户一天只能投票一次,那么可以使用set记录某个用户的投票情况,只需要一日期作为set的key,则将用户的ID作为member即可。查看某个用户今天是否投过票,只需要以今天的日期作为key查看该用户ID是否存在。

5.sorted set 类型

sorted set类型与set类型相似,都是string类型元素的集合,不同的是sorted set 属于有序集合,而sorted set 通过一个double类型的整数score进行排序。sorted set 通过skiplist(跳跃表)和hashtable组合完成。skiplist负责排序功能,而hashtable负责保存数据。

因为sorted set 是排序的set,所以set能做的事情sorted set 也可以做。而且sorted set 还可以完成一些set不能做的事情,例如,使用sorted set 构建一个具有优先级的列队,这也是list类型不能实现的。sorted set 类型支持的命令如表10-6所示。

sorted set命令:

zadd key score member :添加元素member到集合,元素在集合中存在则跟新对应 score

zrem key member : 删除指定元素,1表示成功,如果元素不存在返回0

zincrby key incr member :增加对应member 的 score值,并重新排序,返回更新后的score值

zrank key member :返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序的

zrevrank key member : 同上,但是集合中元素按score从大到小排序

zrange key start end : 从集合中指定区间的元素,返回结构按score顺序排序

zrevrange  key start end :同上,返回结构按照score逆序排序

zrangebyscore key min max : 返回集合中score在给定区间的元素

zcount key min max :返回集合中score 在给定的区间的数量

zcard key : 返回集合中元素个数

zscore key element:返回给定元素对应的score

zremrangebyrank key min max : 删除集合中排名在给定区间的元素

zremrangebyscore key min max : 删除集合中score在给定区间的元素

sorted set 类型在web 应用中非常有用。例如排行榜中按‘顶贴’次数排序,方法是:将排序的值设置成sorted set 的score值,将具体数据设置成相应的value,用户每次按‘顶贴’是,只需执行zadd命令修改score值。

6.hash类型

hash类型是每个key对应一个hashtable,添加删除和修改的时间复杂度都是0(1)。Hash类型适合应用于存储对象,例如用户信息对象。把用户ID作为key,用户信息保存到hash类型中。

新建一个hash类型对象时,为了节省内存,redis使用zipmap存储数据。这个zipmap并不是真正的hashtable,添加,删除和修改操作的时间复杂度都是0(n),但是相比普通hashtable,zipmap节省不是内存。如果field或者value大小超出一定限制,redis在内部自动将zipmap替换为正常的hashtable存储。修改配置文件的hash-max-zipmap-entries和hash-max-zipmap-value选项设置这两个限制。

hash命令:

hset key field value :设置key对应的hash对象中指定域的值。如果key对应的hash对象不存在,将创建此hash对象。如果指定的域已经存在,其值将被重写

hget key field : 返回与field域相关联的值,如果该域不存在或者key对应的hash对象不存在,返回nil

hmget key filed1 。。。filedN :返回存储在key对应的hash对象中各个指定域相关联的值。对于在hash对象不存在的域返回nil

hmset key filed1 value1 filed2 value2 。。。:设置存储在key对应的hash对象中指定域的值。该命令会复写hash中已经存在的域。如果key对应的hash对象不在,将创建此hash对象

hincrby key field interger :将存储在key对应的hash对象中field域相关的值加上interger指定的值。如果key对应的hash不存在,则建立hash对象。如果field域不存在或者不能表示为一个整数,在执行该操作前设置为0

hexists key field :查看指定field域是否存在

hdel key field :删除指定的field域,返回1,。如果指定的域不存在或者key不存在,返回0

hlen key :返回key中filed的数量,如果key 不存在返回0

hkeys key :返回key对应的hahs对象中所有filed名称

hvals key :返回key对应的hash对象中所有的值

hgetall key : 返回key对应的hash对象中所有域和相关联的值。返回值中,每个域名称后面跟着相关联的值。

案例:

7.redis排序

redis支持对list,set,sorted set类型进行排序,sort命令完整格式如下:

sort key [by pattern] [limit strt count] [get pattern] [asc|desc] [alpha] [store dstkey]

1,sort key简单排序

例如:

从案例可以看出 默认排序是 asc就是升序  但是如果是字母按照字母的顺序排序就要加上alpha就可以了

案例:

通过案例可以看出如果不是数字是字母的话不使用alpha就会报错。

[by pattern]

sort 命令可以按照集合元素自身的值排序,还可以按照给定模式(patern)将集合元素内容组合成新的key,并按照新的key对应的内容进行排序,完成后返回排序好的元素集合。

例如:

模式‘name*’ 代表使用key1集合中的填充*,得到3个新的key name1 name2 name3 然后以这3个key的值进行排序,排序的结果就就是,key1集合返回的顺序。

[limit start count]

通过limit可以限定返回结果的数量

例如:

start下标从0开始,上面例子中limit选项的意思是从1开始获取2个

[store dstkey]

使用store可以把排序的结果缓存到指定的key 可以减少cpu的开销

例如:

重温redis命令的更多相关文章

  1. Redis命令拾遗二(散列类型)

    本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明原文地址 :博客园蜗牛NoSql系列地址  http://www.cnblogs.com/tdws/tag/NoSql/ Redis命令拾 ...

  2. redis命令总结

     Redis命令总结 redis 127.0.0.1:6379> info  #查看server版本内存使用连接等信息 redis 127.0.0.1:6379> client list  ...

  3. redis如何执行redis命令

    Redis 命令 Redis 命令用于在 redis 服务上执行操作.所以我们必须要启动Redis服务程序,也就是redis安装目录下的redis-server.exe,你可以双击执行,也可以打开cm ...

  4. 常用 redis 命令(for php)

    Redis 主要能存储 5 种数据结构,分别是 strings,hashes,lists,sets 以及 sorted sets. 新建一个 redis 数据库 $redis = new Redis( ...

  5. Redis命令大全&中文解释&在线测试命令工具&在线中文文档

    在线测试命令地址:http://try.redis.io/ 官方文档:http://redis.io/commands http://redis.io/documentation Redis 命令参考 ...

  6. Redis命令

    redis的常用命令主要分为两个方面.一个是键值相关命令.一个是服务器相关命令(redis-cli进入终端) 1.键值相关命令 keys * 取出当前所有的key exists name 查看n是否有 ...

  7. redis命令参考

    http://doc.redisfans.com/ 进入redis命令行模式方式: 1.进入redis安装目录 2.运行redis-cli

  8. Redis 命令参考

    Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html

  9. Redis 命令总结

    Redis命令总结   连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsa ...

随机推荐

  1. Scala学习之路 (十)Scala的Actor

    一.Scala中的并发编程 1.Java中的并发编程 ①Java中的并发编程基本上满足了事件之间相互独立,但是事件能够同时发生的场景的需要. ②Java中的并发编程是基于共享数据和加锁的一种机制,即会 ...

  2. XML 读写(XmlDocument、XPathNavigator、XDocument)

    内存中的 XML 处理 基于流的 XML 处理提供了最小的负载,但也只提供了最小的灵活性.在很多 XML 处理场景里,你不会在这么低的层次下工作. 对内存中的 XML 的处理则更加方便,但没有单一.标 ...

  3. POJ3468(线段树区间求和+区间查询)

    https://vjudge.net/contest/66989#problem/C You have N integers, A1, A2, ... , AN. You need to deal w ...

  4. Taints和Tolerations -- 污点- 容忍

    1.taint 定义在node上,排斥pod 2.toleration定义在pod中,容忍pod 3.可以在命令行为Node节点添加Taints:  kubectl taint nodes node1 ...

  5. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  6. 将EF项目从dbfirst转化为codefirst

    一个脚本服务的项目,之前是先设计的数据库表,采用EF的dbfirst做的映射.项目完成后,出现迁移瓶颈. 1.dbfirst项目,如果数据库表结构做了调整,需要重新映射 2.当出现表结构一致,但数据库 ...

  7. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  8. WC 2019 游记 - 败者之低语

    败者之低语 WC 2019 游记 Day -1 看了一圈PKU和THU的题,感觉图像识别真有意思... 感觉非常讲道理,pku还是比thu简单一点的... 听说高二414在thu没有进面试? 震惊!( ...

  9. c# 无边框窗体的边框阴影

    Windows API: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...

  10. 20155216 Exp3 免杀原理与实践

    Exp3 免杀原理与实践 基于特征码的改变来实现免杀(实践过程记录) MSF编码器编译后门检测 可以通过VirSCAN来检验后门抗杀能力. ps:选择后门前修改其文件名,不得含有数字. 如上图所示,3 ...