目录
1、官网下载redis-stable并编译
wget http://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
cp src/redis-cli /usr/local/bin/
2、测试
redis-cli -h host -p port -a password
3、相关命令
3.1、链接集群以及查看相关状态
#单节点链接
redis-cli -h [ip] -p [port] -a [pwd]
#集群链接
redis-cli -c -a password -h [ip] -p [port]
#查看节点
192.168.0.182:8001> cluster nodes
查看节点输出
25c0ec80c979ce3a1d5a86b8ee1fb41931a58630 192.168.0.184:8002@18002 slave 13028997bdcfd78e4bbe751875300856b6712f28 0 1686104553205 5 connected
2b824a73ed63d974a44a157153a97caf84d1a386 192.168.0.182:8002@18002 master - 0 1686104555213 7 connected 5461-10922
44c2e3456cef26dc8e06f286989c9a294bf44b5a 192.168.0.184:8001@18001 master - 0 1686104551198 1 connected 0-5460
13028997bdcfd78e4bbe751875300856b6712f28 192.168.0.182:8001@18001 myself,master - 0 1686104553000 5 connected 10923-16383
61bca4eb20f3b3a1dd283e21f9554300892fb36c 192.168.0.59:8001@18001 slave 2b824a73ed63d974a44a157153a97caf84d1a386 0 1686104554209 7 connected
f9e76dd99eb7ee48481b2f4ac0ae76862ec27fea 192.168.0.59:8002@18002 slave 44c2e3456cef26dc8e06f286989c9a294bf44b5a 0 1686104551000 1 connected
3.2、使用客户端查看redis版本信息
127.0.0.1:6379> info server
# Server
redis_version:5.0.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c72a4523c0d699b
redis_mode:standalone
os:Linux 3.10.0-957.21.3.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:2006
run_id:0e16bcb89d8eb05b95d2b127d4b98178e76c86fd
tcp_port:7501
uptime_in_seconds:6317102
uptime_in_days:73
hz:10
configured_hz:10
lru_clock:16174420
executable:/usr/local/redis/src/redis-server
config_file:/usr/local/redis/src/redis.conf
......
3.3、redis库相关命令
切换到1号库;redis有16个初始化库,编号0到15,默认使用0号库
select 1
如果需要验证
auth [password]
查看当前库的key的数量
dbsize
删除当前库的全部数据
flushdb
删除所有库的全部数据
flushall
3.4、redis key相关命令
对key有操作的命令,统一返回值都是1或者0,成功为1,失败为0
查看当前库的全部key
keys *
判断某个key是否存在,存在返回1,不存在返回0
exists [key]
查看某个key的类型,如果key不存在,则返回none
type [key]
删除指定的key数据,成功返回1,失败返回0
del [key]
根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除后在后续异步操作
unlink [key]
查看某个key的过期时间,单位(秒),-1表示永不过期,-2表示已经过期
ttl [key]
给指定的key设置过期时间,单位(秒)
expire [key] 10
3.5、redis 字符串相关命令
set <key> <value>:添加一条数据 例如set k1 v1,添加key为k1,值为v1的数据
get <key>:得到某个key的数据,例如get k1,得到key为k1的值
append <key> <value>:将给定的value,追加到某key的原值的末尾,返回追加后的字符长度
strlen <key>:查询某key的值的长度
setnx <key> <value>:当key不存在的时候,才能添加成功,当key存在的时候,不能添加
incr <key>:将某个key的值,数字增加1,仅仅对数字起作用,如果为空,新增值为1
decr <key>:将某个key的值,数字减少1,仅仅对数字起作用,如果为空,新增值为-1
incrby/decrby <key> <步长>:将key中储存的数字值增减,自定义步长
mset <key1> <value1> <key2> <value2>:批量添加
mget <key1> <key2>:批量取值
msetnx <key1> <value1> <key2> <value2>:批量添加,当且仅当所有的key都不存在(因为原子性,一个失败则都失败)
getrange <key> <起始位置> <结束位置>:获取某个key值的范围,getrange k1 0 2,包含0位置的元素,和2位置的元素
setex <key> <过期时间> <value>:设置键值的同时设置过期时间(单位秒)
getset <key> <value>:设置新值,并返回旧值
3.6、redis 列表相关命令
lpush/rpush <key> <value1> <value2> <value3>:从左边,或者右边添加数据
lpop/rpop <key>:从左边,或者右边取出一个值,列表里这个值就不存在了
rpoplpush <key1> <key2>:从key1的右边取一个值,添加在key2的左边
lrange <key> <起始位置> <结束位置>:按照索引下角标得到元素(从左往右),当结束为值为-1时,代表得到多有,这个值还在列表中
lindex <key> <index>:按照索引,从左往右获得对应的值
llen <key>:获得列表长度
linsert <key> before/after <value> <newVlaue>: 在某个key下的某个值的前面/后面添加一个新的值
lrem <key> <n> <value>:删除某个key下,删除n个值为value的数据
lset <key> <index> <value>:将某个key下的某个下角标的值换成给定的值
3.7、redis 集合相关命令
sadd <key> <value1> <value2> <value3>:添加数据,如果值已经存在,忽略该值
smembers <key>:得到集合中所有的值
sismember <key> <value> :判断某个key中是否存在value,存在返回1,不存在返回0 scard <key>:返回集合的元素个数
srem <key> <value1> <value2>:删除某个key中的某些元素
spop <key>:从key中随机取出一个值,如果值没了,那么key就不在了
srandmember <key> <n>:从某个key中,取出n个值,不会从集合中删除
smove <key1> <key2> <value>:把集合中的一个值移动到另一个集合
sinter <key1> <key2>:取两个集合的交集
sunion <key1> <key2>:取两个集合的并集
sdiff <key1> <key2>:取两个集合的差集(在key1中的,不在key2中的)
3.8、redis 哈希相关命令
hset <key> <field> <value>:给某个key哈希表中的field键复制为value
hget <key> <field> :得到某个key哈希表中某个field的值
hmset <key> <field1> <value1> <field2> <value2>:批量加数据
hexists <key> <field1>:某个key哈希表中某个field是否存在
hkeys <key> :查看某个key哈希表中的全部field
hvals <key>:查看某个key哈希表中的全部value
hincrby <key> <field> <increment>:为某个key的哈希表中的某个field键的值加上响应的增量
hsetnx <key> <field> <value>:某个key哈希表中的field键复制为value,当且仅当key不存在的时候成功
3.9、 redis 有序集合(Zset)相关命令
zadd <key> <score1> <value1><score2> <value2>:添加以一个过着多个元素,score为评分,集合按照从低到高及进行排序,评分可以重复
zrange <key> <start> <end> \[withscores\]:查一定范围的元素,end为-1时,查询所有,withscores加上他,连着评分一起查出
zrangebyscore <key> <min> <max> \[withscores\]:查询score评分在某个范围内的数据,从小到大排序
zrevrangebyscore <key> <max> <min> \[withscores\]:查询score评分在某个范围内的数据,从大到小排序
zincrby <key> <increment> <value>:为元素的score加上指定的增量
zrem <key> <value>:删除数据
zcount <key> <min> <max>:统计score评分在某个范围内的数据的数量
zrank <key> <value>:返回集合中的排序,排序从0开始
3.10、SCAN命令
由于Redis是单线程的,因此在使用一些像KEYS、SMEMBERS等时间复杂度为O(N)的命令时,数据量大的键就会阻塞进程,导致Redis卡顿。
Redis在2.8版本之后增加了SCAN命令:
SCAN cursor [MATCH pattern] [COUNT count]
SCAN及相关命令:
- SCAN 命令用于迭代当前数据库中的数据库键
- SSCAN 命令用于迭代集合键(Set)中的元素
- HSCAN 命令用于迭代哈希键(Hash)中的键值对
- ZSCAN 命令用于迭代有序集合(Sorted Set)中的元素(包括元素成员和元素分值)
优点:
- SCAN命令每次执行的复杂度为 O(1) ,虽然一次完整迭代的复杂度也是 O(N) ,但它是分次进行的,不会阻塞线程
- SCAN命令提供了limit参数,可以控制每次返回结果的最大条数
缺点:
- 对键进行增量式迭代的过程中,如果数据有修改,可能会造成结果的重复,对查询结果只能提供有限的保证(Redis使用了reverse binary iteration算法,保证数据只会重复,不会遗漏)
- 每次返回的数据条数不一定,极度依赖内部实现
1)用法
SCAN 命令是一个基于游标的迭代器(cursor based iterator):SCAN命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的迭代过程。当SCAN命令的游标参数被设置为0时,服务器将开始一次新的迭代, 而当服务器向用户返回值为0的游标时,表示迭代已结束。
// 第一次请求
10.0.1.61-共用开发环境:1>scan 0
1)"7"
2)1) "key1"
2) "Akey9"
3) "Bkey12"
4) "Akey10"
5) "key5"
6) "Bkey11"
7) "Akey7"
8) "key3"
9) "Akey8"
10) "key2"
// 第二次请求
10.0.1.61-共用开发环境:1>scan 7
1)"0"
2)1) "key4"
2) "Akey6"
2)MATCH选项
和KEYS命令一样,SCAN命令的MATCH选项是一个通配符参数
// 第一次请求
10.0.1.61-共用开发环境:1>scan 0 MATCH key*
1)"7"
2)1) "key1"
2) "key5"
3) "key3"
4) "key2"
// 第二次请求
10.0.1.61-共用开发环境:1>scan 7 MATCH key*
1)"0"
2)1) "key4"
3)COUNT选项
COUNT 选项只是对增量式迭代命令的一种提示(hint),但是在大多数情况下,这种提示都是有效的(在数据量少的情况下,COUNT值与返回的结果数量不相等)
10.0.1.61-共用开发环境:1>scan 0 MATCH key* COUNT 1
1)"8"
2)1) "key1"