一、安装redis:
1、下载地址:http://redis.io/download
2、解压redis-.tar.gz(tar zxvf redis-.tar.gz)
3、安装:
进入redis-*目录下:
cdredis−2.6.13编译:
make
安装: $ make [PREFIX=安装路径] install
4、复制redis原目录下的redis.conf(redis-*/redis.conf)到安装路径下
二、命令介绍(主要的):
redis-benchmark:Redis性能测试工具
redis-check-aof:检查aof日志的工具
redis-check-dump:检查rbd日志的工具
redis-cli:Redis命令行操作工具。连接客户端用的
redis-server:redis服务进程,启动redis用的
三、redis配置文件redis.conf参数介绍(主要的):
daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save * :保存快照的频率,第一个表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
四、启动redis:
进入redis的bin目录
启动redis:./redis-server /etc/redis.conf
检查是否启动成功:$ ps -ef | grep redis
五、进入redis客户端:
进入redis的bin目录
运行./redis-cli
六、停止redis服务器:
pkill redis-server 或者 ./redis-cli shutdown
七、key相关查询命令:
1、redis允许模糊查询key:有三个通配符
*:任意多个字符
?:单个字符
[]:括号内的某一个字符
如:
keys * 查询全部key
keys s* 查询以s开头的key
keys sit[ey] 查询site或者sity的key
keys site 查询key为site
2、返回随机key名:randomkey
3、查询key的类型:type key
4、key是否存在:exists key(返回0不存在,1存在)
5、删除key:del key(删除多个:del key1 key2)
6、修改key名称(如果新key存在将覆盖):rename 原key 新key
7、修改key名称(如果新key存在将修改不成功):renamenx 原key 新key
8、切换数据库:select 1(redis默认有16个数据库,编号从0开始,默认在第一个数据库)
9、将key移动到别的数据库:move key 数据库编号(move key 1)
10、查询key的有效期:
ttl key(返回 秒数。注:-1表示永久有效,key不存在也返回-2)
pttl key(返回 毫秒数)
11、设置key的有效期:
expire key 秒数(以秒为单位设置生命周期)
pexpire key 毫秒数(以毫秒为单位设置生命周期)
12、设置key永久有效:persist key
13、删除当前数据库中所有key:flushdb
14、删除所有数据库中所有key:flushall
八、redis字符串类型操作:
1、set key value [ex 秒数]/[px 毫秒数] [nx]/[xx]
[ex 整数]表示多少秒有效,[px 整数] 表示多少毫秒有效(如果ex,px同时存在就以后面的有效时间为准)。
[nx] 表示key不存在时才执行操作,[xx] 表示key存在时才执行操作.
2、一次设置多个键值:mset key1 value1 key2 value2 …
3、一次查询多个键值:mget key1 key2 …
4、偏移字节:
setrange key offset value(表示把key对应值的offset偏移字节改为value)
如:
set word hello
setrange greet 2 xx
然后word的值就为hexxo了;
注:如果偏移量数大于字符长度,就自动补\x00
如:
set word hello
setrange greet 7 !
然后word的值就为hello\x00\x00!了;
5、追加:append key value(在key对应的值最后面追加字符串)
6、获取字符串范围的值:getrange key start stop
如:
set status working
getrange word 0 5
结果:wordin
getrange word 0 -4
结果:word
注:
1、start>=length,返回空字符串
2、stop>=length,返回到字符串结尾处
3、stop>0&&start>stop,返回空字符串
7、得到旧值并设置新值:getset key newvalue
如:
set status 0
ok
getset status 1
0
getset status 2
1
get status
2
8、给指定的key值做加法:
incr key(给指定的key值加1。不存在的key当成0在加1)
incrby key number(给指定的key值加number)
incrbyfloat key floatnumber(给指定的key加浮点数)
9、给指定的key值做减法:
decr key(给指定的key值减1。不存在的key当成0在减1)
decrby key number(给指定的key值减number)
decrbyfloat key floatnumber(给指定的key减浮点数)
九、link 链表结构操作:
1、插入到链表头部:lpush key value
2、插入到链表最尾:rpush key value
3、返回并删除链表尾的元素:rpop key
4、返回并删除链表头的元素:lpop key
5、返回链表中[start,sop]中元素:lrange key start stop(左边从0开始,右边从-1开始)
6、从key链表中删除值:lrem key count value(删除count个值 的value,count>0从链表头删除,count<0从链表尾删除)
7、截取key对应的链表值: ltrim key start stop(从start开始到stop截取key中值)
8、返回index索引上的值:lindex key index
9、返回链表中元素的个数:llen key
10、在key链表中寻找search并在search前|后插入value:linsert key after|before search value
(注:如果search不存在插入不成功,如果有多个search会插入到第一个search前|后)
11、把key1的尾部值拿到key2的头部:rpoplpush key1 key2(原子性)
十、集合操作:
1、单个集合相关操作:
集合key中增加元素:sadd key value1 value2
查看集合key中所有元素:smembers key
删除集合key中value1,value2的元素:srem key value1 value2(value不存在将忽略,返回真正删除掉的元素个数)
返回并删除集合key中1个随机元素:spop key(可以用到抽奖中)
返回集合key中随机的一个元素:srandmember key
判断value是否在集合key中:simember key value(是返回1,不是返回0)
查看集合key中有多少个元素:scard key
2、两个集合之间的操作:
把集合key1里面的一个value移动到集合key2中去:smove key1 key2 value
求集合key1 key2 key3的交集:sinter key1 key2 key3
求集合key1 key2 key3的交集并赋值给key4:sinterstore key4 key1 key2 key3
求集合key1 key2 key3的并集:sunion key1 key2 key3
求集合key1 key2 key3的并集并赋值给key4:sunionstore key4 key1 key2 key3
求集合key1 key2 key3的差集:sdiff key1 key2 key3
3、有序集合相关操作(order set):
添加有序集合:zadd key1 score1 value1 score2 value2 score3 value3 …
查询有序集合:zrange key start stop [withscores ]
查询有序集合中score的范围:zrangebyscore key scorevalue1 scorevalue2 [withscores] limit offset N
作用:集合(升序)排序后,取score在[min,max]内的元素,并跳过offset个,取出N个。
例:
zadd stu 1 a 3 b 4 c 9 e 12 f 15 g
zrangebyscore stu 3 12 limit 1 2
1) c
2) e
zrangebyscore stu 3 12 withscores limit 1 2
1) c
2) 4
3) e
4) 9
查询集合的总个数:zcard key
查询集合范围中的个数:zcount key scoreMin scoreMax(统计scoreMin和scoreMax中的总条数)
删除:
按照value删除元素:zrem key value1 value2 …(可以删除多个)
按照排列删除元素:zremrangebyrank key min max(删除排名需要在min和max之间的元素)
按照socre删除元素:zremrangebyscore key min max(删除score在min和max之间的元素)
聚合查询:
zinterstore dest numkeys key1 key2 …
[weights weight1 weight2 …]
[aggregate sum | min | max]
求key1,key2的交集,key1,key2的权重分别是weight1,weight2
聚合方法用sum | min | max默认sum
聚合的结果保存在dest的新聚合里面
注:如果有交集,如交集元素为socre,score;
aggrgate sum就是socre相加,min取最小,max取最大
4、hash结构:
添加:
添加单个:hset key field value(把key中field域的值设为value,如果没有field域直接添加,有就覆盖原来的field域值)
添加key的多个field:hmset key field1 value1 [field2 value2 field3 value3]
查看:
查看key中field域的值:hget key field
查看key中多个field的值:hmget key field1 field2 fieldN
查看key中全部值:hgetall key
查看key中所有的field:hkeys key
查看key中所有的value:kvals key
删除:
删除key中指定的field:hdel key field
判断:
判断key中有没有field域:hexists key field
统计:
得到key中field的个数:hlen key
增长:
给key中field域值增加整数到value中:hincrby key field value
给key中field域值增加小数到value中:hincrbyfloat key field value