目录:
Redis安装与下载
- 从官网下载源码包
[root@linux-node2 ~]# wget http://download.redis.io/releases/redis-5.0.5.tar.gz
- 解压
[root@linux-node2 ~]# tar xvf redis-5.0.5.tar.gz
- 编译安装
[root@linux-node2 redis-5.0.5]# make PREFIX=/usr/local/redis install
- 复制配置文件,并修改配置
[root@linux-node2 redis-5.0.5]# cp redis.conf /usr/local/redis/ # 将第136行后台运行打开 [root@linux-node2 redis]# grep -n daemonize redis.conf 135:# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 136:daemonize yes 152:# When the server runs non daemonized, no pid file is created if none is 153:# specified in the configuration. When the server is daemonized, the pid file 170:# output for logging but daemonize, logs will be sent to /dev/null
- 启动redis
[root@linux-node2 ~]# /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 9408:C 14 Oct 2019 11:02:24.808 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 9408:C 14 Oct 2019 11:02:24.808 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=9408, just started 9408:C 14 Oct 2019 11:02:24.808 # Configuration loaded # 查看redis端口是否开启 [root@linux-node2 ~]# netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 5153/mongod tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4199/rsync tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9409/redis-server 1
Redis Key操作命令
- del key1 key2 … keyn
作用:删除1个或者多个键
返回值:不存在的key忽略掉,返回真正删除的key的数量
- rename key newkey
作用:将key修改为新的key名
注:如果成功返回ok,原key被删除
- renamenx key newkey
作用:与rename相同,把key改名为newkey,但是返回值为数字
返回:发生修改返回1,未发生修改返回0
- move key db
将key移动到其他redis数据库中
注:一个redis进程,可以打开不止一个数据库, 默认打开16个数据库,从0到15编号,如果想打开更多数据库,可以从配置文件修改
127.0.0.1:6379> KEYS * # 查看所有key
1) "name"
127.0.0.1:6379> MOVE name 1 # 将key:name移到1号数据库
(integer) 1
127.0.0.1:6379> KEYS * # 0号数据库为空
(empty list or set)
127.0.0.1:6379> select 1 # 选择1号数据库
OK
127.0.0.1:6379[1]> KEYS * # 查看1号数据库所有key
1) "name"
- flushall
清空当前redis数据库的所有keys
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> keys *
(empty list or set)
- keys pattern
查看当前数据库中keys
pattern可选择如下:
*: 通配任意多个字符
?: 通配单个字符
[]: 通配括号内的某1个字符
redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
OK
redis 127.0.0.1:6379> keys o*
1) “one”
redis 127.0.0.1:6379> keys *o
1) “two”
redis 127.0.0.1:6379> keys ???
1) “one”
2) “two”
redis 127.0.0.1:6379> keys on?
1) “one”
redis 127.0.0.1:6379> set ons yes
OK
redis 127.0.0.1:6379> keys on[eaw]
1)”one”
- randomkey 返回随机key
127.0.0.1:6379> RANDOMKEY
"two"
127.0.0.1:6379> RANDOMKEY
"three"
127.0.0.1:6379> RANDOMKEY
"two"
- exists key
判断key是否存在 返回1/0
127.0.0.1:6379> EXISTS one
(integer) 1
- type key
返回key存储的值的类型 有string(字符串) link set(链表) order set(集合) hash(哈希)
127.0.0.1:6379> type ons
string
Key生命周期
-
ttl key 查询key的生命周期
-
expire key 整型值 设置key的生命周期
-
pexpire key 毫秒数, 设置生命周期
-
pttl key, 以毫秒返回生命周期
-
persist key 把指定key设置为永久有效
注:对于不存在的key或已过期的key/不过期的key,都返回-1
Redis中,对于不存在的key,返回-2
Redis 五大数据类型操作
字符串数据类型操作
- set key value [ex 秒数] / [px 毫秒数]
设置key存放字符串类型数据 ex 存货秒数,px为毫秒数
set a 1 ex 10 , 10秒有效
Set a 1 px 9000 , 9秒有效
# 注: 如果ex,px同时写,以后面的有效期为准
# 如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
- mset multi set
一次性设置多个键值
mset key1 v1 key2 v2 ....
- get key
获取key的值
- mget key1 key2 …keyn
获取多个key的值
- getset key newvalue
获取并返回旧值,设置新值
redis 127.0.0.1:6379> set cnt 0
OK
redis 127.0.0.1:6379> getset cnt 1
"0"
redis 127.0.0.1:6379> get cnt
"1"
- incr key
作用: 指定的key的值加1,并返回加1后的值
- incrby key number
指定key的值加上后面指定的数字
redis 127.0.0.1:6379> incrby age 90
(integer) 92
- incrbyfloat key floatnumber
指定key的值加上后面指定的浮点数,并返回浮点数
redis 127.0.0.1:6379> incrbyfloat age 3.5
“95.5”
- decr key
指定的key的值减1,并返回减1后的值
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379> decr age
(integer) 19
- decrby key number
指定key的值减去后面指定的数字
redis 127.0.0.1:6379> decrby age 3
(integer) 16
应用场景:在登录的时候,可以控制频控,使用incr来表示用户的尝试登陆次数
回到目录
链表数据类型操作
- lpush key value
作用: 把值插入到链表头部
- rpop key
作用: 返回并删除链表尾元素
- rpush
作用: 把值插入到链表尾部
- lpop
作用: 返回并删除链头部元素
- lrange key start stop
作用: 返回链表中[start ,stop]中的元素
规律: 左数从0开始,右数从-1开始
- ltrim key start stop
作用: 剪切key对应的链表,切[start,stop]一段,并把该段重新赋给key
- lindex key index
作用: 返回index索引上的值,
如 lindex key 2
- llen key
作用:计算链接表的元素个数
redis 127.0.0.1:6379> llen task
(integer) 3
- linsert key after|before search value
作用: 在key链表中寻找’search’,并在search值之前|之后,.插入value
注: 一旦找到一个search后,命令就结束了,因此不会插入多个value
场景: 长轮询Ajax,在线聊天时,能够用到
集合数据类型操作
- sadd setname value1 value2
作用: 往集合setname中增加元素
- srem value1 value2
作用: 删除集合中集为 value1 value2的元素
返回值: 忽略不存在的元素后,真正删除掉的元素的个数
- spop key
作用: 返回并删除集合中key中1个随机元素
- srandmember key
作用: 返回集合key中,随机的1个元素.
- sismember key value
作用: 判断value是否在key集合中
是返回1,否返回0
- smembers key
作用: 返回集中中所有的元素
- scard key
作用: 返回集合中元素的个数
- smove source dest value
作用:把source中的value删除,并添加到dest集合中
- sinter s1 s2 s3
作用: 求出s1 s2 s3 三个集合中的交集,并返回
redis 127.0.0.1:6379> sadd s1 0 2 4 6
(integer) 4
redis 127.0.0.1:6379> sadd s2 1 2 3 4
(integer) 4
redis 127.0.0.1:6379> sadd s3 4 8 9 12
(integer) 4
redis 127.0.0.1:6379> sinter s1 s2 s3
1) "4"
- sinterstore dest s1 s2 s3
作用: 求出s1 s2 s3 三个集合中的交集,并赋给dest
- suion s1 s2 s3… sn
作用: 求出s1 s2 s3… sn的并集,并返回
sdiff s1 s2 s3
作用: 求出s1与s2 s3的差集
即s1-s2-s3
有序集合数据类型操作
- zadd s1 score1 value1 score2 value2 …
redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lilei 21 lilei
(integer) 3
- zrem s1 value1 value2 …
作用: 删除集合中的元素
- zremrangebyscore sname min max
作用: 按照socre来删除元素,删除score在[min,max]之间的
127.0.0.1:6379> ZREMRANGEBYSCORE stu 16 18
(integer) 1
# 18 lily会被删除
- zremrangebyrank sname start end
作用: 按排名删除元素,删除名次在[start,end]之间的
redis 127.0.0.1:6379> zremrangebyrank stu 0 1
(integer) 2
redis 127.0.0.1:6379> zrange stu 0 -1
- zrank key member
查询member的排名(升序 0名开始)
- zrevrank key memeber
查询 member的排名(降序 0名开始)
- ZRANGE key start stop [WITHSCORES]
把集合排序后,返回名次[start,stop]的元素
默认是升续排列
Withscores 是把score也打印出来
- zrevrange key start stop
作用:把集合降序排列,取名字[start,stop]之间的元素
- zrangebyscore key min max [withscores] limit offset N
作用: 集合(升续)排序后,取score在[min,max]内的元素,
并跳过 offset个, 取出N个
redis 127.0.0.1:6379> zadd stu 1 a 3 b 4 c 9 e 12 f 15 g
(integer) 6
redis 127.0.0.1:6379> zrangebyscore stu 3 12 limit 1 2 withscores
1) "c"
2) "4"
3) "e"
4) "9"
- zcard key
返回元素个数
- zcount key min max
返回[min,max] 区间内元素的数量
哈希数据类型操作
- hset key field value
作用: 把hash表中 filed域的值设为value
注:如果没有field域,直接添加,如果有,则覆盖原field域的值
- hmset key field1 value1 [field2 value2 field3 value3 ……fieldn valuen]
作用: 设置field1->N 个域, 对应的值是value1->N
(对应PHP理解为 $key = array(file1=>value1, field2=>value2 …fieldN=>valueN))
- hget key field
作用: 返回key中field域的值
- hmget key field1 field2 fieldN
作用: 返回key中field1 field2 fieldN域的值
- hgetall key
作用:返回key中,所有域与其值
- hdel key field
作用: 删除key中 field域
- hlen key
作用: 返回key中元素的数量
- hexists key field
作用: 判断key中有没有field域
- hincrby key field value
作用: 是把key中的field域的值增长整型值value
- hincrby float key field value
作用: 是把key中的field域的值增长浮点值value
- hkeys key
作用: 返回key中所有的field
- hvals key
作用: 返回key中所有的value