redis命令(二)


一. 全局操作

1. 连接服务器:

redis-cli -h 127.0.0.1 -p 6379 -a abcd

参数说明:

        redis-cli    即redis-cli.exe,我们通常缺省后缀.exe

        -h    即host,服务器的IP地址

        -p    即port,使用的端口号

        -a    密码。这个我想了下,可能有2种理解:①auth,②password,因为p被端口号使用了,所以用第二个字母a。默认没有开启密码,需要配置

        如果连接远程的Redis服务器,必须指定服务器的IP地址。

        参数都可缺省,缺省时默认-h为127.0.0.1,-p为6379。

        连接本地的Redis服务器:redis-cli -a yourPassword

        连接远程的Redis服务器:redis-cli -h serverIP -a yourPassword

        也可以之后再输入密码:

redis-cli

auth yourPassword

2. 密码操作

设置/修改密码:

config set requirepass newPassword

      修改密码后需要重新输入密码验证。Reids默认的数据类型是String,比如设置密码为123,会自动作为字符串“123”。

查看密码:

config get requirepass

备注:

推荐使用修改配置文件的方式。

因为本次连接期间,对配置文件的修改(包括密码),只在本次连接期间有效,并不会同步到redis.windows.conf中。

断开连接后,下次连接时,使用的仍是配置文件中的参数(包括密码),之前命令行修改的配置参数失效。

3.查看所有 或 进行匹配

4. 设置过去时间 查看时间  ttl 返回秒

5. 清空redis

flushdb

6. 随机取出一个key

randomkey

7. 查看key的类型

type key

8. 查看数据库中key的数量

dbsize

9. 查看服务器信息

info

10. 查看redis正在做什么

monitor  #注意,有高手的文章说这个会急剧降低redis性能,只能在测试环境使用。

11. 查看日志

slowlog get

slowlog get 10


二. redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存储系统

set key value : 设置key的值,若存在则覆盖

setnx key value : SET if Not eXists,若存在则不操作。

MSET key1 value1 key2 value2 ... keyN valueN : 设置这些key的值,若存在则覆盖

MSETNX key1 value1 key2 value2 ... keyN valueN : 同mset,但如果其中一个key已经存在了,则都不设置。这些操作都是原子的。

rename key : 重命名

append key value : 向key的字符串追加拼接。

get key:获取key对应的值 MGET key1 key2 ... keyN:获取这些key对应的值

EXISTS key:查看是否存在该元素。

GETSET key value : 获取该元素的值,并给该元素设置新值。(通常和incr搭配使用,比如一个mycount一直incr,然后达到某些情况需要清零,清零之前需要知道mycount的值).

del key:删除元素

RENAME oldkey newkey:重命名


三 .redis提供原子自增操作incr,用来防止多线程并发出现数据错误

incr key : 原子的+1;

DECR key :原子的-1;

DECRBY key integer :原子的-integer;

INCRBY key integer :原子的+integer


四. redis可以定时存储,即设置几秒后删除该变量

        expire key 多少秒:设置多少秒后过期;  ttl key:Time To Live,查看还可以存活多久,-2表示key不存在;-1表示定时任务消失,永久存储。

EXPIRE key seconds :设置该元素多少秒后失效PEXPIRE key milliseconds:设置该元素多少毫秒后失效TTL key:查看还可以存活多少秒,-2表示key不存在,-1表示永久存储

SETEX key seconds value :等价于先设置变量再设置超时,即在缓存中使用:存储的同时设置超时时间,这个操作是原子的

persist key : 取消过期时间

expireat key 时间戳:unix时间戳,1970.1.1之后,这个绝对时间,将在这个时间删除key。expireatpages:about1356933600:在2012年12月31日上午12点删除掉关键字

SETEX KEY_NAME TIMEOUT VALUE:设置key的值为value,并在timeout秒后失效,key将被删除

五. 存储有序队列:list

rpush  keyList value : 向keyList添加元素,向后加,r表示右边

lpush  keyList value : 向keyList左边添加元素,LPUSHputs the new value at the start of the list.

lrange  keyList beginIndex endIndex : 获取keyList的元素,用两端的索引取出子集,endIndex

=-1则表示全部取出

llen keyList : 获取keyList的长度大小

lpop keyList : 取出并移除keyList第一个元素,左边的元素

rpop keyList : 取出并移除keyList最后一个元素,右边的元素

LINDEX key index : 获取该索引下的元素。

lrem key count value : 删除count个value。(count为正数,从头开始,删除count个value元素;count为负,则从尾部向头删除|count|个value元素;count为0,则所有的元素为value的都删除)

LSET key index value : 设置索引为index下的元素为value.超出索引范围报错。

LTRIM key start end : 清空索引在start 和end之外的元素,索引从0开始,两端保留,两端之外的清空。

RPOPLPUSH srckey dstkey : 源队列srckey,目标队列dstkey,将srckey的最后一个移除,并放到dstkey的第一个。

六. 无序且唯一集合set

        和java中list与set的区别一样。这里的set无序且值唯一。

sadd key value: 向set添加元素   

srem key value:从set中移除元素

smembers key: 取出所有set元素

SISMEMBER key value: 查看value是否存在set中

SUNION key1 key2 ... keyN:将所有key合并后取出来,相同的值只取一次

scard key: 获取set中元素的个数

srandmember key: Return a random element from a Set, without removing the element.随机取出一个

SDIFF key1 key2 ... keyN:获取第一set中不存在后面几个set里的元素。

SDIFFSTORE dstkey key1 key2 ... keyN:和sdiff相同,获取key1中不存在其他key里的元素,但要存储到dstkey中。

SINTER key1 key2 ... keyN:取出这些set的交集

SINTERSTORE dstkey key1 key2 ... keyN:取出这些key的交集并存储到dstkey

SMOVE srckey dstkey member:将元素member从srckey中转移到dstkey中,这个操作是原子的。


七. 有序集合sorted set

        和set一样,唯一。但z多了个score用来排序。所以命令又像list一样:

ZADD key score member :向有序set中添加元素member,其中score为分数,默认升序;

ZRANGE key start end [WITHSCORES] : 获取按score从低到高索引范围内的元素,索引可以是负数,-1表示最后一个,-2表示倒数第二个,即从后往前。withscores可选,表示获取包括分数。

ZREVRANGE key start end  [WITHSCORES] :同上,但score从高到低排序。

ZCOUNT key min max:获取score在min和max范围内的元素的个数

ZCARD key:获取集合中元素的个数。

ZINCRBY key increment member :根据元素,score原子增加increment.

ZREMRANGEBYSCORE key min max:清空集合内的score位于min和max之间的元素。

ZRANK key member:获取元素的索引(照score从低到高排列)。

ZREM key member:移除集合中的该元素

ZSCORE key member:获取该元素的score


八. 对象存储Hashes

可以存储对象,比如人,编号,姓名,年龄等

HSET key field value:key是对象名,field是属性,value是值;

HMSET key field value [field value ...]:同时设置多个属性

HGET key field:获取该对象的该属性

HMGET key field value [field value ...]:获取多个属性值

HGETALL key:获取对象的所有信息

HKEYS key:获取对象的所有属性

HVALS key:获取对象的所有属性值

HDEL key field:删除对象的该属性

HEXISTS key field:查看对象是否存在该属性

HINCRBY key field value:原子自增操作,只能是integer的属性值可以使用;

HLEN key: Return the number of entries (fields) contained in the hash stored at key.获取属性的个数。


九.sort排序

9.1 sort命令描述:

返回或保存给定列表、集合、有序集合key中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。

9.2 一般sort用法

最简单的sort使用方法是sort key和sort key desc。

sort key:返回键值从小到大排序的结果。

sort key desc:返回键值从大到小排序的结果。

假设price列表保存了今日的物品价格, 那么可以用sort命令对它进行排序:

# 开销金额列表

9.3 使用alpha修饰符对字符串进行排序

       因为sort命令默认排序对象为数字,当需要对字符串进行排序时,需要显式地在sort命令之后添加alpha修饰符。

9.4 使用limit修饰符限制返回结果

        排序之后返回元素的数量可以通过limit修饰符进行限制,修饰符接受offset和count两个参数。offset:指定要跳过的元素数量,即起始位置。count:指定跳过offset个指定的元素之后,要返回多少个对象。

以下例子返回排序结果的前5个对象(offset为0表示没有元素被跳过)。

# 添加测试数据,列表值为1~10

9.5 使用外部key进行排序

可以使用外部 key 的数据作为权重,代替默认的直接对比键值的方式来进行排序。

假设现在有用户数据如下:

以下代码将数据输入到redis中:

9.6  by选项

默认情况下, sort uid直接按uid中的值排序:

通过使用by选项,可以让uid按其他键的元素来排序。

比如说, 以下代码让uid键按照user_level_{uid}的大小来排序:

        user_level_*是一个占位符,它先取出uid中的值,然后再用这个值来查找相应的键。

        比如在对uid列表进行排序时,程序就会先取出uid的值1、2、3、4,然后使用user_level_1、user_level_2、user_level_3和 user_level_4的值作为排序uid的权重。

9.7 get选项

使用get选项,可以根据排序的结果来取出相应的键值。

比如说,以下代码先排序uid,再取出键user_name_{uid}的值:

现在的排序结果要比只使用 sort uid by user_level_* 要直观得多。

9.8 获取多个外部键

        可以同时使用多个get选项,获取多个外部键的值。

        以下代码就按 uid 分别获取 user_level_{uid} 和 user_name_{uid} :

get有一个额外的参数规则,那就是可以用#获取被排序键的值。

以下代码就将 uid 的值、及其相应的 user_level_* 和 user_name_* 都返回为结果:

9.9  获取外部键,但不进行排序

通过将一个不存在的键作为参数传给 by 选项, 可以让 sort 跳过排序操作,直接返回结果:

这种用法在单独使用时,没什么实际用处。

不过,通过将这种用法和get选项配合,就可以在不排序的情况下,获取多个外部键,相当于执行一个整合的获取操作(类似于 sql数据库的join关键字)。

以下代码演示了,如何在不引起排序的情况下,使用sort、by和get获取多个外部键:

9.10 将哈希表作为get或by的参数

除了可以将字符串键之外, 哈希表也可以作为 get 或 by 选项的参数来使用。

比如说,对于前面给出的用户信息表:

        我们可以不将用户的名字和级别保存在 user_name_{uid} 和 user_level_{uid} 两个字符串键中, 而是用一个带有 name 域和 level 域的哈希表 user_info_{uid} 来保存用户的名字和级别信息:

        之后, by 和 get 选项都可以用 key->field 的格式来获取哈希表中的域的值, 其中 key 表示哈希表键, 而 field 则表示哈希表的域

9.11 保存排序结果

默认情况下, sort 操作只是简单地返回排序结果,并不进行任何保存操作。

通过给 store 选项指定一个 key 参数,可以将排序结果保存到给定的键上。

如果被指定的 key 已存在,那么原有的值将被排序结果覆盖。

eg : sort numbers store sorted-numbers

9.12 返回值

没有使用 store 参数,返回列表形式的排序结果。

使用 store 参数,返回排序结果的元素数量。


十. 事物

        redis内置了很多原子操作的命令,比如incr,getset等,但实际中我们希望将一组命令原子的执行,这时候就需要用到事物。做法如下:

        1. 使用关键字multi

        2. 输入你想要的命令组合

        3. 输入exec来执行,或discard来放弃

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,132评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,457评论 3 404
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,411评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,147评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,145评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,611评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,962评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,948评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,479评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,514评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,640评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,228评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,973评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,402评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,551评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,210评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,714评论 2 366