启动redis服务:
使用cmd窗口,cd到redis安装目录下。
(双击目录下的redis-server.exe和下面一样的效果)
C:\Users\Administrator>cd c:\java\Redis
c:\java\Redis>redis-server.exe redis.windows.conf
启动服务端:
上面cmd窗口不关,另外开一个cmd窗口,也要cd到安装目录下,指定地址和端口。
(双击目录下的redis-cli.exe和下面一样的效果)
C:\Users\Administrator>cd c:\java\Redis
c:\java\Redis>redis-cli.exe -h 127.0.0.1 -p 6379
或者
C:\Users\Administrator>cd c:\java\Redis\
c:\java\Redis>redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
执行 PING 命令,用于检测 redis 服务是否启动。
连接远程服务(有密码):
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
避免中文乱码:
redis-cli --raw
数据类型
不同类型不允许使用相同的key,用之前需要先删除原先的key
redis 127.0.0.1:6379> DEL runoob
- String
redis 127.0.0.1:6379> SET runoob "菜鸟教程"
OK
redis 127.0.0.1:6379> GET runoob
"菜鸟教程"
设置:set key value
获取:get key
getRange key start end:返回截取的字符串[start,end];end为-1,代表结尾。
getset key value : 更新value,并返回旧的value
SETBIT key offset value:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
getBit key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
mget key1 key2… :获取所有(一个或多个)给定 key 的值。
SETEX key seconds value:将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETNX key value:只有在 key 不存在时设置 key 的值。
PSETEX key milliseconds value;将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以ms为单位)。
SETRANGE key offset value:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
strlen key :返回 key 所储存的字符串值的长度。
MSET key value [key value …] :同时设置一个或多个 key-value 对。
MSETNX key value [key value …]:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
incr key :将 key 中储存的数字值增一。
INCRBY key increment:将 key 所储存的值加上给定的增量值(increment) 。
incrByFloat key increment:将 key 所储存的值加上给定的浮点增量值(increment) 。
decr key :将 key 中储存的数字值减一。
DECRBY key decrement:key 所储存的值减去给定的减量值(decrement) 。
APPEND key value: 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
- Hash
应用场景:存储、读取、修改用户属性
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET runoob field1
"Hello"
redis 127.0.0.1:6379> HGET runoob field2
"World"
设置: HSET key field value(一个);hmset key field1 value2 field2 value2 …(一个或者多个)
获取:hget key field
HDEL key field1 [field2]:删除一个或多个哈希表字段。
HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。
HMGET key field1 [field2]:获取所有给定字段的值。
hgetall key : 获取在哈希表中指定 key 的所有字段和值。
HINCRBY key field increment:为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment。
HKEYS key:获取所有哈希表中的字段。
HLEN key:获取哈希表中字段的数量。
HSETNX key field value:只有在字段 field 不存在时,设置哈希表字段的值。
HVALS key:获取哈希表中所有值。
HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的键值对。
> HMSET sites google "google.com" runoob "runoob.com" weibo "weibo.com" 4 "taobao.com"
OK
> HSCAN sites 0 match "run*"
1) "0"
2) 1) "runoob"
2) "runoob.com"
- List(有序)
应用场景:
- 最新消息排行等功能(比如朋友圈的时间线)
- 消息队列
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabbitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
设置:lpush key value
获取:lrange key startNum stopNum
BLPOP key1 [key2 ] timeout:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
BRPOP key1 [key2 ] timeout:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT:
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
LINDEX key index: 通过索引获取列表中的元素。
LINSERT key BEFORE|AFTER pivot value:在列表的元素前或者后插入元素。
LLEN key:获取列表长度。
LPOP key: 移出并获取列表的第一个元素。
LPUSH key value1 [value2]:将一个或多个值插入到列表头部。
LPUSHX key value:将一个值插入到已存在的列表头部。
LRANGE key start stop::获取列表指定范围内的元素。
LREM key count value:移除列表元素。
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
LSET key index value:通过索引设置列表元素的值。
LTRIM key start stop: 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
RPOP key:移除列表的最后一个元素,返回值为移除的元素。
RPOPLPUSH source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
RPUSH key value1 [value2]:在列表中添加一个或多个值。
RPUSHX key value:为已存在的列表添加值。
- Set
应用场景:
- 共同好友
- 利用唯一性,统计访问网站的所有独立ip
- 好友推荐时,根据tag求交集,大于某个阈值就可以推荐
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "rabbitmq"
3) "mongodb"
设置:sadd key member
获取:smembers key
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
SCARD key :获取集合的成员数
SDIFF key1 [key2]:返回第一个集合与其他集合之间的差异。
SDIFFSTORE destination key1 [key2]:返回给定所有集合的差集并存储在 destination 中。
SINTER key1 [key2]:返回给定所有集合的交集。
SINTERSTORE destination key1 [key2]
SISMEMBER key member:判断 member 元素是否是集合 key 的成员。
SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。
SPOP key:移除并返回集合中的一个随机元素;
SRANDMEMBER key [count]:返回集合中一个或多个随机数
SREM key member1 [member2]:移除集合中一个或多个成员
SUNION key1 [key2]:返回所有给定集合的并集
SUNIONSTORE destination key1 [key2]
SSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的键值对。
- zset(有序)
应用场景:
- 排行榜
- 带权重的消息队列
127.0.0.1:6379> zadd myset 0 java
(integer) 1
127.0.0.1:6379> zadd myset 0 oracle
(integer) 1
127.0.0.1:6379> zadd myset 0 js
(integer) 1
127.0.0.1:6379> zrangebyscore myset 0 10
1) "java"
2) "js"
3) "oracle"
127.0.0.1:6379> zadd myset 1 js
(integer) 0
127.0.0.1:6379> zrangebyscore myset 0 10
1) "java"
2) "oracle"
3) "js"
设置:ZADD key score1 member1 [score2 member2](向有序集合添加一个或多个成员,或者更新已存在成员的分数)
获取:zRangeByScore key startScore stopScore
Zcard key:获取有序集合的成员数
ZCOUNT key min max:计算在有序集合中指定区间分数的成员数。
ZINCRBY key increment member:有序集合中对指定成员的分数加上增量 increment。
ZINTERSTORE destination numkeys key [key …]:计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中
ZLEXCOUNT key min max:在有序集合中计算指定字典区间内成员数量。
ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合指定区间内的成员。
ZRANGEBYLEX key min max [LIMIT offset count]:通过字典区间返回有序集合的成员
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]:通过分数返回有序集合指定区间内的成员
ZRANK key member:返回有序集合中指定成员的索引
ZREM key member [member …]:移除有序集合中的一个或多个成员
ZREMRANGEBYLEX key min max:移除有序集合中给定的字典区间的所有成员
ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员
ZREMRANGEBYSCORE key min max:移除有序集合中给定的分数区间的所有成员
ZREVRANGE key start stop [WITHSCORES]:返回有序集中指定区间内的成员,通过索引,分数从高到低
ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分数区间内的成员,分数从高到低排序
ZREVRANK key member:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
ZSCORE key member:返回有序集中,成员的分数值
ZUNIONSTORE destination numkeys key [key …]:计算给定的一个或多个有序集的并集,并存储在新的 key 中
ZSCAN key cursor [MATCH pattern] [COUNT count]:迭代有序集合中的元素(包括元素成员和元素分值)
Redis Keys Command
- DEL KEY : key存在时删除key
- DUMP KEY : 序列化给定 key ,并返回被序列化的值
- EXISTS KEY : key是否存在
- expire key seconds:设置过期时间(s)
- pexpire key ms :设置过期时间(ms)
- expireat key timestamp: 设置过期时间(时间戳,单位s)
- pexpireat key timestamp : 设置过期时间(时间戳,单位ms)
- keys pattern : 查找指定key。
KEYS my*
查找my开头的key;KEYS *
所有的key。 - move key db:将当前数据库的 key 移动到给定的数据库 db 当中。
数据库是以序列号表示:
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set my java
OK
127.0.0.1:6379> move my 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get my
"java"
127.0.0.1:6379[1]>
- persist key:移除 key 的过期时间,key 将持久保持。
- pttl key :返回key剩余过期时间(ms)
- ttl key : 返回key剩余过期时间(s)
- randomKey : 返回随机一个key
- rename key newKey :修改key名称
- renamenx key newKey : 仅当newKey不存在时,将key改为newKey
- type key: 返回key所储存值的类型
- SCAN cursor [MATCH pattern] [COUNT count] : 迭代数据库中的数据库键。
HyperLogLog
基数:不重复元素个数。
- pfadd key element [element …]:添加指定元素到 HyperLogLog 中。
- pfcount key [key…]:返回给定HyperLogLog的基数估算值。
- pfmerge destkey sourcekey [sourcekey…]:将多个 HyperLogLog 合并为一个 HyperLogLog,并返回destkey的基数估算值
发布订阅 (publish/subscribe)
同一个频道的发布和订阅操作是要在不同的客户端上实现。
订阅频道testChat(同时收到了publish的消息):
127.0.0.1:6379> subscribe testChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testChat"
3) (integer) 1
1) "message"
2) "testChat"
3) "redis publish test"
在频道testChat中发布消息:
127.0.0.1:6379> publish testChat "redis publish test"
(integer) 1
- subscribe channel [channel…] : 订阅至少一个频道信息
- psubscribe pattern [pattern] : 订阅至少一个符合pattern模式的频道(以*作为匹配符)
127.0.0.1:6379> psubscribe test2*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "test2*"
3) (integer) 1
1) "pmessage"
2) "test2*"
3) "test2Chat"
4) "redis publish test21"
127.0.0.1:6379> publish test2Chat "redis publish test21"
(integer) 1
- publish channel message : 将message发送到channel频道
- unsubscribe channel [channel…] :退订频道
- punsubscribe pattern [pattern] :退订指定模式的频道
- pubsub subcommand [argument [argument …]] : 查看订阅与发布系统状态(argument用法和pattern差不多)
127.0.0.1:6379> pubsub channels
1) "test1"
127.0.0.1:6379> pubsub channels test12*
(empty list or set)
127.0.0.1:6379> pubsub channels test1*
1) "test1"