redis常用操作
重复写入值会将之前的值覆盖:
127.0.0.1:6379> set key1 aming
OK
127.0.0.1:6379> set key1 zhangfei
OK
127.0.0.1:6379> get key1
"zhangfei"
检测value有没有值,没有就赋值:
127.0.0.1:6379> SETNX key1 aaa
(integer) 0 //0表示value存在不覆盖,与1相反
给key设置过期时间:
127.0.0.1:6379> set key3 aaa ex 10
OK
先设定过期时间然后再赋值:
127.0.0.1:6379> get key3
"bbb"
从左侧加入一个元素:
127.0.0.1:6379> LPUSH list2 aaa
(integer) 1
127.0.0.1:6379> LPUSH list2 bbb
(integer) 2
127.0.0.1:6379> LPUSH list2 0 -1
(integer) 4
127.0.0.1:6379> LRANGE list2 0 -1 //先加入到在后面
1) "bbb"
2) "aaa"
从上面取出一个元素:
127.0.0.1:6379> LPOP list2
"bbb"
127.0.0.1:6379> LPUSH list2 ccc
(integer) 2
127.0.0.1:6379> LPUSH list2 ddd
(integer) 3
127.0.0.1:6379> LRANGE list2 0 -1
1) "ddd"
2) "ccc"
3) "aaa"
从下面取出一个元素:
127.0.0.1:6379> RPOP list2
"aaa"
再元素后插入新元素:
127.0.0.1:6379> LINSERT list2 AFTER ccc aaa
(integer) 3
127.0.0.1:6379> LINSERT list2 AFTER aaa bbb
(integer) 4
127.0.0.1:6379> LRANGE list2 0 -1
1) "ddd"
2) "ccc"
3) "aaa"
4) "bbb"
修改元素:
127.0.0.1:6379> LSET list2 1 111 //1表示第2个
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "ddd"
2) "111"
3) "aaa"
4) "bbb"
查看链表中第几个元素:
127.0.0.1:6379> LINDEX list2 1
"111"
127.0.0.1:6379> LINDEX list2 0
"ddd"
查看链表中有几个元素:
127.0.0.1:6379> LLEN list2
(integer) 4
redis常用操作
向集合放入元素:
127.0.0.1:6379> SADD seta aaa
(integer) 1
127.0.0.1:6379> SADD seta bbb
(integer) 1
127.0.0.1:6379> SMEMBERS seta
1) "bbb"
2) "aaa"
删除元素:
127.0.0.1:6379> SREM seta aaa
(integer) 1
127.0.0.1:6379> SMEMBERS seta
1) "bbb"
随机取出一个元素,删除:
127.0.0.1:6379> SPOP seta
"bbb"
127.0.0.1:6379> SMEMBERS seta
(empty list or set)
127.0.0.1:6379> SADD seta aaa
(integer) 1
127.0.0.1:6379> SADD seta bbb
(integer) 1
127.0.0.1:6379> SADD seta ccc
(integer) 1
127.0.0.1:6379> SADD seta 111
(integer) 1
127.0.0.1:6379> SADD setb 111
(integer) 1
127.0.0.1:6379> SADD setb 222
(integer) 1
127.0.0.1:6379> SADD setb aaa
(integer) 1
127.0.0.1:6379> SMEMBERS seta
1) "111"
2) "bbb"
3) "ccc"
4) "aaa"
127.0.0.1:6379> SMEMBERS setb
1) "111"
2) "222"
3) "aaa"
求差集:
127.0.0.1:6379> SDIFF seta setb
1) "bbb"
2) "ccc"
127.0.0.1:6379> SDIFF setb seta
1) "222" //求差集以前面的为标准
求交集:
127.0.0.1:6379> SINTER seta setb
1) "111"
2) "aaa"
求并集:
127.0.0.1:6379> SUNION seta setb
1) "aaa"
2) "111"
3) "bbb"
4) "222"
5) "ccc"
判断一个元素是否属于一个集合:
127.0.0.1:6379> SISMEMBER seta 111
(integer) 1
- sunionstore sete seta setb //求并集并存储到sete
- srandmember seta //随机取出一个元素,但不删除
- zadd zseta 11 123 //创建有序集合
- zrange zseta 0 -1 //显示所有元素,按顺序显示
- zrange zseta 0 -1 withscores //可以带上分值
- zrem zseta 222 //删除指定元素
- zrank zseta 222 //返回元素的索引值,索引值从0开始,按score正向排序
- zrevrank zseta 222 //同上,不同的是,按score反序排序 zrevrange zseta 0 -1 反序显示所有元素,并带分值
- zcard zseta //返回集合中所有元素的个数
- zcount zseta 1 10 // 返回分值范围1-10的元素个数
- zrangebyscore zseta 1 10 // 返回分值范围1-10的元素
- zremrangebyrank zseta 0 2 //删除索引范围0-2的元素,按score正向排序
- zremrangebyscore zseta 1 10 //删除分值范围1-10的元素
redis常用操作
创建有序集合:
127.0.0.1:6379> ZADD zseta 11 123
(integer) 1
127.0.0.1:6379> ZADD zseta 0 1ab
(integer) 1
127.0.0.1:6379> ZRANGE zseta 0 -1 //显示所有元素,按顺序显示
1) "1ab"
2) "123"
删除元素:
127.0.0.1:6379> ZREM zseta 1ab
(integer) 1
127.0.0.1:6379> ZRANGE zseta 0 -1
1) "123"
返回元素的索引值,索引值从0开始,按score正向排序:
127.0.0.1:6379> ZADD zseta 10 1ab
(integer) 1
127.0.0.1:6379> ZADD zseta 14 sssab
(integer) 1
127.0.0.1:6379> ZADD zseta 16 12121212
(integer) 1
127.0.0.1:6379> ZADD zseta 1000 asdasdf212
(integer) 1
127.0.0.1:6379> ZRANGE zseta 0 -1
1) "1ab"
2) "123"
3) "sssab"
4) "12121212"
5) "asdasdf212"
127.0.0.1:6379> ZRANK zseta sssab
(integer) 2
127.0.0.1:6379> ZRANK zseta 1ab
(integer) 0
127.0.0.1:6379> ZRANK zseta 12121212
(integer) 3
127.0.0.1:6379> ZREVRANK zseta 12121212 //同上,不同的是,按score反序排序
(integer) 1
127.0.0.1:6379> ZREVRANGE zseta 0 -1 //反序显示所有元素,并带分值
1) "asdasdf212"
2) "12121212"
3) "sssab"
4) "123"
5) "1ab"
返回集合中所有元素的个数:
127.0.0.1:6379> ZCARD zseta
(integer) 5
127.0.0.1:6379> ZCOUNT zseta 50 1000
(integer) 1
127.0.0.1:6379> ZCOUNT zseta 10 1000
(integer) 5
127.0.0.1:6379> ZCOUNT zseta 10 10
(integer) 1
127.0.0.1:6379> ZCOUNT zseta 10 19
(integer) 4
返回分值范围的元素:
127.0.0.1:6379> ZRANGEBYSCORE zseta 10 19
1) "1ab"
2) "123"
3) "sssab"
4) "12121212"
127.0.0.1:6379> ZRANGEBYSCORE zseta 10 14
1) "1ab"
2) "123"
3) "sssab"
删除分值范围的元素:
(error) ERR wrong number of arguments for 'zremrangebyscore' command
127.0.0.1:6379> ZREMRANGEBYSCORE zseta 10 11
(integer) 2
删除索引范围0-2的元素,按score正向排序:
127.0.0.1:6379> ZREMRANGEBYRANK zseta 0 1
(integer) 2
127.0.0.1:6379> ZREVRANGE zseta 0 -1
1) "asdasdf212"
- hset user1 name aming //建立hash
- hset user1 age 30
- hset user1 job it
- hgetall user1
- hmset user2 name aming age 30 job it //批量建立键值对
- hmget user2
- hmget user2 name age job
- hdel user2 job //删除指定filed
- hkeys user2 //打印所有的key
- hvals user2 //打印所有的values
- hlen user2 //查看hash有几个filed
建立hash:
127.0.0.1:6379> HMSET hash2 a 1 b 2 c 3 d 4
OK
127.0.0.1:6379> HGETALL hash2
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
删除指定区域:
127.0.0.1:6379> HDEL hash2 b
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "a"
2) "1"
3) "c"
4) "3"
5) "d"
6) "4"
打印所有的key:
127.0.0.1:6379> HKEYS hash2
1) "a"
2) "c"
3) "d"
127.0.0.1:6379>
打印所有的值:
127.0.0.1:6379> HVALS hash2
1) "1"
2) "3"
3) "4"
查看hash有几个:
127.0.0.1:6379> HLEN hash2
(integer) 3
redis操作键值
- keys * //取出所有key
- keys my* //模糊匹配
- exists name //有name键 返回1 ,否则返回0;
- del key1 // 删除一个key //成功返回1 ,否则返回0;
- EXPIRE key1 100 //设置key1 100s后过期
- ttl key // 查看键 还有多长时间过期,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间。
- select 0 //代表选择当前数据库,默认进入0 数据库
- move age 1 // 把age 移动到1 数据库
- persist key1 //取消key1的过期时间
- randomkey //随机返回一个key
- rename oldname newname //重命名key
- type key1 //返回键的类型
取出所有的key:
127.0.0.1:6379> keys *
1) "k2"
2) "hash2"
3) "seta"
4) "mykey"
5) "list2"
6) "setb"
7) "key1"
8) "list"
9) "list1"
10) "set1"
11) "k1"
12) "set3"
13) "set2"
14) "hash1"
15) "k3"
16) "zseta"
模糊匹配:
127.0.0.1:6379> keys k*
1) "k2"
2) "key1"
3) "k1"
4) "k3"
判断键是否存在:
127.0.0.1:6379> EXISTS key1
(integer) 1
删除键:
127.0.0.1:6379> DEL key1
(integer) 1
设定过期时间:
127.0.0.1:6379> EXPIRE k2 10
(integer) 1
选择数据库:
127.0.0.1:6379> select 0 //默认就是0
OK
移动键:
127.0.0.1:6379> MOVE set2 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "set2"
取消key过期时间:
127.0.0.1:6379> EXPIRE mykey 1000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 994
127.0.0.1:6379> PERSIST mykey
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) -1
改名:
127.0.0.1:6379> RENAME setb set3
OK
查看类型:
127.0.0.1:6379> type seta
set
127.0.0.1:6379> type zseta
zset
- dbsize //返回当前数据库中key的数目
- info //返回redis数据库状态信息
- flushdb //清空当前数据库中所有的键
- flushall //清空所有数据库中的所有的key
- bgsave //保存数据到 rdb文件中,在后台运行
- save //作用同上,但是在前台运行
- config get * //获取所有配置参数
- config get dir //获取配置参数
- config set dir //更改配置参数
- 数据恢复: 首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服务即可恢复数据
127.0.0.1:6379> DBSIZE
(integer) 12
127.0.0.1:6379> CONFIG GET bind
1) "bind"
2) "127.0.0.1"
redis安全设置
设置密码:
[root@zhangfei ~]# vim /etc/redis.conf
加入一行:
requirepass aming>com
重启redis:
[root@zhangfei ~]# killall redis-server
[root@zhangfei ~]# redis-server /etc/redis.conf
[root@zhangfei ~]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
登陆报错,因为设置了密码
[root@zhangfei ~]# redis-cli -a 'aming>com' //因为有>所以需要单引号
127.0.0.1:6379> keys *
1) "hash1"
2) "list1"
3) "seta"
4) "set1"
5) "hash2"
6) "k1"
7) "mykey"
8) "zseta"
9) "list"
10) "list2"
11) "set3"
12) "k3"
更改config名称:
[root@zhangfei ~]# vim /etc/redis.conf
新增 rename-command CONFIG aming
[root@zhangfei ~]# killall redis-server
[root@zhangfei ~]# redis-server /etc/redis.conf
[root@zhangfei ~]# !redis-cli
redis-cli -a 'aming>com'
127.0.0.1:6379> config get dir
(error) ERR unknown command 'config'
127.0.0.1:6379> aming get dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> quit
redis慢查询日志
修改配置文件:
[root@zhangfei ~]# vim /etc/redis.conf
slowlog-log-slower-than 1000 //单位ms,表示慢于1000ms则记录日志
slowlog-max-len 128 //定义日志长度,表示最多存128条
指令:
slowlog get //列出所有的慢查询日志
slowlog get 2 //只列出2条
slowlog len //查看慢查询日志条数
为了演示,修改配置文件:
将slowlog-log-slower-than 10000
改成
slowlog-log-slower-than 10
[root@zhangfei ~]# killall redis-server
[root@zhangfei ~]# redis-server /etc/redis.conf
[root@zhangfei ~]# killall redis-server
[root@zhangfei ~]# redis-server /etc/redis.conf
[root@zhangfei ~]# redis-cli -a 'aming>com'
127.0.0.1:6379> SLOWLOG get
1) 1) (integer) 0
2) (integer) 1507909080
3) (integer) 655
4) 1) "COMMAND"
5) "127.0.0.1:36898"
6) ""
127.0.0.1:6379> keys *
1) "k1"
2) "hash1"
3) "list1"
4) "mykey"
5) "set3"
6) "list2"
7) "hash2"
8) "set1"
9) "list"
10) "k3"
11) "zseta"
12) "seta"
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> SLOWLOG get
1) 1) (integer) 3
2) (integer) 1507909182
3) (integer) 17
4) 1) "get"
2) "key3"
5) "127.0.0.1:36898"
6) ""
2) 1) (integer) 2
2) (integer) 1507909177
3) (integer) 32
4) 1) "keys"
2) "*"
5) "127.0.0.1:36898"
6) ""
3) 1) (integer) 1
2) (integer) 1507909104
3) (integer) 25
4) 1) "SLOWLOG"
2) "get"
5) "127.0.0.1:36898"
6) ""
4) 1) (integer) 0
2) (integer) 1507909080
3) (integer) 655
4) 1) "COMMAND"
5) "127.0.0.1:36898"
6) ""
php安装redis扩展模块
下载安装包:
[root@zhangfei ~]# cd /usr/local/src/
[root@zhangfei src]# wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip
[root@zhangfei src]# unzip phpredis.zip
[root@zhangfei phpredis-develop]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@zhangfei phpredis-develop]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
[root@zhangfei phpredis-develop]# make
[root@zhangfei phpredis-develop]# make install
[root@zhangfei phpredis-develop]# vim /usr/local/php-fpm/etc/php.ini
extension=memcache.so
extension=redis.so
检查扩展:
[root@zhangfei phpredis-develop]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
有redis模块
重启服务才能生效:
[root@zhangfei phpredis-develop]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
redis存储session
把php的session存到redis中:
[root@zhangfei ~]# vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf
后面加上
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379"
[root@zhangfei ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
为了方便测试,我们把密码关掉:
[root@zhangfei ~]# vim /etc/redis.conf
将
activerehashing yes
改成
#activerehashing yes
[root@zhangfei ~]# killall redis-server
[root@zhangfei ~]# redis-server /etc/redis.conf
测试:
- wgt http://study.lishiming.net/.mem_se.txt mv .mem_se.txt /usr/local/apache2/htdocs/session.php
- 其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
- curl localhost/session.php //结果类似于1443702394
1443702394
i44nunao0g3o7vf2su0hnc5440 - 命令行连接redis,也可以查看到该key以及对应的值
- 如果想用php连接redis cluster,需要使用predis扩展
- 安装方法类似phpredis,predis扩展地址https://github.com/nrk/predis