redis-serverredis-cliredis-cli -h host -p port -a passwordset key valueget keydel keyexists keyexpire key 10pexpire key 10ttl keypersist keyselect index(index表示数据库编号)flushdbflushallmove key nkeys *dbsizetype keyrandomkeyrename key1 key2renamex key1 key2infoshutdownquit、exitRedis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。其通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
字符串类型是Redis最基础的数据结构,其它的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。
应用场景: 缓存、计数器、对象存储缓存
set key value 设置变量
setnx key value 仅当key不存在时进行set
setex key time value 过期时间(expire)
setrange key index value 从index开始替换value
mset key1 value1 key2 value2 批量设置
msetnx key1 value1 [key2 value2…] 批量设置键值对,仅当参数中所有的key都不存在时执行,原子性操作,一起成功,一起失败
get key 获取变量
getrange key 0 -1 截取字符串,0对应start,1对应end
getset key value 设置值,返回旧值
mget key1 key2 批量获取
incr age 执行+1
incrby age 10 执行+10
decr age 执行-1
decrby age 10 执行-10
incrbyfloat 增减浮点数
append key value 向指定的key的value后追加字符串
strlen 长度
setrange key offset value 设置指定位置的字符
getrange key start end 获取存储在key上的值的一个子字符串
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),也可以获取指定范围指定下标的元素等。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
特点:
1.列表中的元素是有序的,可以通过索引下标获取某个元素霍某个某个范围内的元素列表
2.列表中的元素可以是重复的
应用场景: 消息队列、栈、文章列表等等。
常用指令:
添加操作
lpush/rpush key value1[value2…] 从左边/右边向列表中PUSH值(一个或者多个)
lpushx/rpushx key value 向已存在的列名中push值(一个或者多个),list不存在 lpushx失败
linsert key before|after pivot value 在指定列表元素的前/后 插入value
查找操作
lindex key index 通过索引获取列表元素
lrange key start end 获取list 起止元素 (索引从左往右 递增)
llen key 查看列表长度
删除操作
lpop/rpop key 从最左边/最右边移除值 并返回
lrem key count value count >0:从头部开始搜索 然后删除指定的value 至多删除count个 count < 0:从尾部开始搜索… count = 0:删除列表中所有的指定value。
ltrim key start end 通过下标截取指定范围内的列表
rpoplpush source destination 将列表的尾部(右)最后一个值弹出,并返回,然后加到另一个列表的头部
修改操作
lset key index value 通过索引为元素设值
阻塞操作
blpop/brpop key1[key2] timout 移出并获取列表的第一个/最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
brpoplpush source destination timeout 和rpoplpush功能相同,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
Redis的Set是string类型的无序集合,我们不能通过索引获取元素。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
应用场景: 标签
常用命令:
集合内操作
sadd key member1[member2…] 向集合中无序增加一个/多个成员
srem key member1[member2…] 移除集合中一个/多个成员
scard key 获取集合的成员数
smembers key 返回集合中所有的成员
sismember key member 查询member元素是否是集合的成员,若存在返回1,不存在返回0
srandmember key [count] 随机返回集合中count个成员,count缺省值为1
spop key [count] 随机移除并返回集合中count个成员,count缺省值为1
集合间操作
sinter key1 [key2…] 返回所有集合的交集
sinterstore destination key1[key2…] 在SINTER的基础上,存储结果到集合中。覆盖
sunion key1 [key2…] 返回所有集合的并集
sunionstore destination key1 [key2…] 在SUNION的基础上,存储结果到及和张。覆盖
sdiff key1[key2…] 返回所有集合的差集 key1- key2 - …
sdiffstore destination key1[key2…] 在SDIFF的基础上,将结果保存到集合中。覆盖
smove source destination member 将source集合的成员member移动到destination集合
sscan key [MATCH pattern] [COUNT count] 在大量数据环境下,使用此命令遍历集合中元素,每次遍历部分
几乎所有的编程语言都提供了哈希(hash)结构,Redis中 hash 是一个string类型的field和value的映射表value={{field1,value1},{field2,value2}…},可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
应用场景: 用户信息缓存
常用命令:
hset key field value 将哈希表 key 中的字段 field 的值设为 value。重复设置同一个field会覆盖,返回0
hmset key field1 value1 [field2 value2…] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
hsetnx key field value 只有在字段 field不存在时,设置哈希表字段的值。
hget key field value 获取存储在哈希表中指定字段的值
hmget key field1 [field2…] 获取所有给定字段的值
hexists key field 查看哈希表 key 中,指定的字段是否存在。
hdel key field1 [field2…] 删除哈希表key中一个/多个field字段
hlen key 获取哈希表中字段的数量
hkeys key 获取所有字段field
hvals key 获取哈希表中所有值value
hgetall key 获取在哈希表key 的所有字段和值
hincrby key field n 为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段
hincrbyfloat key field n 为哈希表 key 中的指定字段的浮点数值加上增量 n。
hscan key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。
在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis正是通过分数来为集合中的成员进行从小到大的排序。
应用场景: 排行榜系统等具有排名的场景
常用命令:
集合内
zadd key score member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard key 获取有序集合的成员数
zscore key member 返回有序集中,成员的分数值
zcount key min max 计算在有序集合中指定区间score的成员数
zlexcount key min max 在有序集合中计算指定字典区间内成员数量
zincrby key n member 有序集合中对指定成员的分数加上增量 n
zscan key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)
范围查询
zrank key member 返回有序集合中指定成员的索引
zrevrank key member 返回有序集合中指定成员的索引,从大到小排序
zrange key start end 通过索引区间返回有序集合成指定区间内的成员
zrevrange key start end 通过索引区间返回有序集合成指定区间内的成员,分数从高到底
zrangebylex key min max 通过字典区间返回有序集合的成员
zrevrangebylex key max min 按字典顺序倒序返回有序集合的成员
zrangebyscore key min max 返回有序集中指定分数区间内的成员 -inf 和 +inf分别表示最小最大值,只支持开区间
zrevrangebyscore key max min 返回有序集中指定分数区间内的成员,分数从高到低排序
删除操作
zrem key member1 [member2…] 移除有序集合中一个/多个成员
zremrangebylex key min max 移除有序集合中给定的字典区间的所有成员
zremrangebyrank key start stop 移除有序集合中给定的排名区间的所有成员
zremrangebyscore key min max 移除有序集合中给定的分数区间的所有成员
集合间操作
zinterstore destination numkeyskey1 [key2 …] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中,numkeys:表示参与运算的集合数,将score相加作为结果的score
zunionstore destination numkeys key1 [key2…] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
电脑上可以截取图片吗?如果可以,该如何操作呢?相信很多小伙伴都只知道一两种截图的方式,知道的并不全面。其实,电脑上有多种方式截图的,而且非常方便。电脑怎么截图?今天我们就来教大家如何使用电脑截取图片的8种常用方式!操作环境:演示机型:Delloptiplex7050系统版本:Windows10方法一:系统自带截图具体操作:同时按下电脑的自带截图键【Windows+shift+S】,可以选择其中一种方式来截取图片:截屏有矩形截屏、任意形状截屏、窗口截屏和全屏截图。 方法二:QQ截图具体操作:在电脑登录QQ,然后同时按下【Ctrl+Alt+A】,可以任意截图你需要的界面,可以把截图的页面直接下载,
1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好
Ruby语言是否可以用于创建全新的移动操作系统或桌面操作系统,即是否可以用于系统编程? 最佳答案 嗯,现在有一些操作系统使用比C更高级的语言。基本上,ruby解释器本身需要用一些低级的东西来编写,并且需要一些引导加载代码将功能齐全的ruby解释器作为独立内核加载到内存中。一旦ruby解释器被引导并以内核模式(或innerrings之一)运行,就没有什么可以阻止您在其上构建整个操作系统。不幸的是,它可能会很慢。每个操作系统功能的垃圾收集可能会相当引人注目。ruby解释器将负责任务调度和网络堆栈等基本事情,使用垃圾收集框架会大大