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. 异步IO的概念

    同步IO是阻塞IO: 异步IO分为两种:1.主动查询是否有数据:2.被动监听是否有数据状态. https://www.cnblogs.com/euphie/p/6376508.html

  2. 【Lucene4.8教程之六】QueryParser与Query子类:怎样生成Query对象

    版权声明:本文为博主原创文章.转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/deta ...

  3. BZOJ3569:DZY Loves Chinese II(线性基)

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图, ...

  4. pytorch 绘制训练曲线;服务器端训练,本地浏览器显示,本地打不开;tensorboard端口被占

    代码里面用tensorboard保存了训练的日志在logs目录里面 用tensorboard命令打开日志目录:tensorboard --logdir="./logs/" 会显示一 ...

  5. JS 点击元素发ajax请求 打开一个新窗口

    JS 点击元素发ajax请求 打开一个新窗口 经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打 ...

  6. Ubuntu 重新安装声卡驱动

    有的时候ubuntu 的声卡不能用,没有声音也不能使用麦克风,所有很困惑,查看声卡驱动的时候不显示声卡的驱动,所有我们要自己安装声卡驱动, 1.下载驱动包这是比较新的声卡驱动,1.0.20 $ wge ...

  7. (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化] -公有云常见网络问题及思路

    在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...

  8. memcpy、memmove、memset、memchr、memcmp、strstr详解

    第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...

  9. 基于树莓派3的CAN总线编程

    基于树莓派3的CAN总线编程 原创 2016年09月08日 10:16:13 标签: 树莓派3 / MCP2515 / CAN总线 / python / 命令行 5254 简介 树莓派3使用Pytho ...

  10. 20155306 白皎 免考实践总结——0day漏洞

    本次免考实践提纲及链接 第一部分 基础知识 1.1 0day漏洞概述 1.2二进制文件概述 1.3 必备工具 1.4 crack实验 第二部分 漏洞利用 2.1栈溢出利用 2.1.1 系统栈工作原理 ...