Redis安装配置与常用命令
Redis简介
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。
内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过RedisSentinel提供高可用,通过RedisCluster提供自动分区。
简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。
Redis是一款NoSQL产品。
官网:http://www.redis.io
或者:http://redis.cn/
Redis的特点
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave主从模式的数据备份。
Redis的优势
性能极高——Redis读的速度为11w/s,写的速度为8.1w/s。
丰富的数据类型——Redis支持二进制案例的Strings,Lists,Hashes,Sets即OrderedSets数据类型操作。
原子性——Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
丰富的特性——Redis还支持public/subscribe,通知,key过期等特性。
Redis应用
应用在高并发和实时请求的场景,eg新浪微博
hash:关注列表,粉丝列表
string:微博数,粉丝数
(避免使用selectcount(*)from...)
sortedset:
TopN,热门微博
还有github,
stackoverflow也
用到了redis
Redis安装配置
Redis安装
windows下直接解压即可使用,主要说明Linux下的安装方式:
解压:
tar-zxvfsoft/redis-3.2.0.tar.gz-Capp/
重命名:
mvapp/redis-3.2.0/app/redis
编译:
make
安装:
makeinstallPREFIX=/home/uplooking/app/redis
Redis配置
初始配置
修个redis.conf中的配置项
binduplooking01
daemonizeyes(后台运行)
logfile/opt/redis-3.2.0/logs/redis.log(日志文件,目录必须存在)
启动服务
make完成之后,在redis-3.2.0/src目录下会出现编译后的redis服务器程序redis-server,还有用于测试的客户端程序redis-cli。
redis-3.2.0]$src/redis-serverredis.conf
当然,如果再执行了makeinstall则会在指定安装目录下生成一个bin目录,同时也会有相关的命令用于操作Redis.
启动客户端
redis-3.2.0]$src/redis-cli-hlocalhost-p6379
关闭服务
ps-ef|grepredis
找到进程id后直接kill-9就可以了。
Redis配置查看
Redis的配置文件位于Redis的安装目录之下,文件名为redis.conf。可以通过config命令来查看或设置配置项。
查看
语法,Redisconfig命令格式如下:
redislocalost:6379>configgetconfig_set_name
eg:redislocalost:6379>configgetloglevel
1)"loglevel"
2)"notice"
使用*号获取所有配置项:redislocalost:6379>configget*
编辑
可以通过修改redis.conf文件或使用configset命令来修改配置
基本语法:
redislocalost:6379>configsetconf_setting_namenew_value
eg:redislocalost:6379>configsetloglevel"warning"
redislocalost:6379>configgetloglevel
1)"loglevel"
2)"warning" -->对当前服务有效,之后当服务重启之后,才会失效
Redis操作
string(字符串)
string是redis最基本的类型,你可以理解成与memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
实例
redis127.0.0.1:6379>SETname"redis.net.cn"
OK
redis127.0.0.1:6379>GETname
"redis.net.cn"
在以上实例中我们使用了Redis的SET和GET命令。键为name,对应的值为redis.net.cn。
注意:一个键最大能存储512MB。
常见的string操作命令如下:
setkeyvalue设置指定key的值(会覆盖无视数据类型) setnameyaohuiying getkey获取指定key的值 getname getrangekeystartend返回key中字符串值的子字符 getrangename14 注意:字符串索引从0开始,获取索引片段[start,end],包头包尾 getsetkeyvalue将给定key的值设为value,并返回key的旧值(oldvalue) getsetnameliuxiangqian 返回值为yaohuiying mgetkey1[key2..]获取所有(一个或多个)给定key的值 mgetnamename1 setexkeysecondsvalue将值value关联到key,并将key的过期时间设为seconds(以秒为单位) setnxkeyvalue只有在key不存在时设置key的值 作用同set,唯一和set的区别在于,只有当key不存在的时候,才进行设置, 而key存在,无法完成覆盖 setrangekeyoffsetvalue用value参数覆写给定key所储存的字符串值,从偏移量offset开始 对key的原先的value进行局部覆盖,从offset偏移量开始, value有多长,就覆盖多长 strlenkey返回key所储存的字符串值的长度 msetkeyvalue[keyvalue...]同时设置一个或多个key-value对 MSETNXkeyvalue[keyvalue...]同时设置一个或多个key-value对,当且仅当所有给定key都不存在 psetexkeymillisecondsvalue这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间, 而不是像SETEX命令那样,以秒为单位 incrkey将key中对应储存的数字值增一 对key对应的value进行+1,但是value必须是数字类型的字符串 INCRBYkeyincrement将key所储存的值加上给定的增量值(increment) 之定义的步长 incrbyfloatkeyincrement将key所储存的值加上给定的浮点增量值(increment) decrkey将key中储存的数字值减一 decrbykeydecrementkey所储存的值减去给定的减量值(decrement) appendkeyvalue如果key已经存在并且是一个字符串, APPEND命令将value追加到key原来的值的末尾
hash(哈希)
Redishash是一个键值对集合。Redishash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
实例
redis127.0.0.1:6379>HMSETw3ckeyname"redistutorial"description"redisbasiccommandsforcaching"likes20visitors23000
OK
redis127.0.0.1:6379>HGETALLw3ckey
1)"name"
2)"redistutorial"
3)"description"
4)"redisbasiccommandsforcaching"
5)"likes"
6)"20"
7)"visitors"
8)"23000"
以上实例中hash数据类型存储了一些描述信息(name,description,likes,visitors)到hash的w3ckey中。使用hgetall获取所有的内容。
每个hash可以存储232-1键值对(40多亿)。
常用命令操作如下:
hexistskeyfield查看hash表key中,指定字段是否存在 0表示没有,1表示有 hgetkeyfield获取hash表中指定字段的值 hgetallkey获取所有的字段和值 hincrbykeyfieldincrement为指定字段的整数值加上增量increment hincrbyfloatkeyfieldincrement为指定字段的浮点值加上增量increment hkeyskey获取所有的字段 hlenkey获取key的字段的数量 hdelkeyfield2[field2]删除一个或多个哈是表字段 hmgetkeyfield1[field2]获取所有给定字段的值 hmsetkeyf1v1[f2v2]同时将多个file-value设置到key中 hsetkeyfieldvalue将哈希表key的field设置为value hsetnxkeyfieldvalue当在field不存在时,设置相关字段的值 hvalskey获取所有的值 hscankeycursor[MATCHpattern][COUNTcount]迭代哈希表中的键值对
list(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例
redis127.0.0.1:6379>lpushredis.net.cnredis
(integer)1
redis127.0.0.1:6379>lpushredis.net.cnmongodb
(integer)2
redis127.0.0.1:6379>lpushredis.net.cnrabitmq
(integer)3
redis127.0.0.1:6379>lrangeredis.net.cn010
1)"rabitmq"
2)"mongodb"
3)"redis"
redis127.0.0.1:6379>
列表最多可存储232-1元素(4294967295,每个列表可存储40多亿)。
常用操作命令如下:
注意:关于list的操作,可以分为从左边操作,也可以从右边进行操作
l--->left(头部),r---->right(尾部)
blpopkey1[key2]timeout移除并获取列表中的第一个元素,如果没有会阻塞列表直到超时【单位是秒s】 或发现可弹出元素为止 简言之就是删除key1key2.。。中的元素,如果没有元素则阻塞,结束条件为 要么时间超过了timeout;要么发现有新的元素进来 brpopkey1[key2]timeout移除并获取列表中的最后一个元素,如果没有会阻塞列表直到超时或发现可弹出 元素为止 同blpop,不同在于删除元素的方向不一致 brpoplpushsourcedestinationtimeout从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回 它,如果没有元素会阻塞列表知道等待超时或发现可弹出元素为止 uplooking01:6379>brpoplpushseasonseason1100 "spring" (7.59s) lindexkeyindex通过索引获取列表中的元素 注意一个: lindexkey-1获取的是最后一个元素 linsertkeybefore|afterpivotvalue在列表的元素前或后插入元素 uplooking01:6379>lrangeseason0-1 1)"winter" 2)"autumn" 3)"summer" uplooking01:6379>linsertseasonaftersummerspring (integer)4 uplooking01:6379>lrangeseason0-1 1)"winter" 2)"autumn" 3)"summer" 4)"spring" llenkey获取列表长度,列表大小 lpopkey移出并获取列表的第一个元素 lpushkeyvalue1[value2]将一个或多个值插入到列表头部 lpushxkeyvalue将一个或多个值插入到已存在的列表头部 lrangekeystartstop获取列表指定返回内的元素 [start,stop] 如果要出去lrange中的所有的元素的话 lrangekey0-1 lremkeycountvalue移出列表元素 count>0:从头往尾移除值为value的元素,1时,表示移除1个元素 count<0:从尾往头移除值为value的元素,-2时,表示移除2个元素 count=0:移除所有值为value的元素。 lsetkeyindexvalue通过索引设置列表元素的值(list.set(i,value)) 需要大家注意的是一个特殊的索引-1,表示最后一个元素 ltrimkeystartstop对一个列表进行修剪(trim),也就是说,让列表只保留指定区间内的元素, 删除其它元素 [start,stop] uplooking01:6379>lrangeseason0-1 1)"winter" 2)"autumn" 3)"summer" 4)"spring" uplooking01:6379>ltrimseason12 OK uplooking01:6379>lrangeseason0-1 1)"autumn" 2)"summer" rpopkey移出并获取列表最后一个元素 rpoplpushsourcedestination移出列表的最后一个元素,并将该元素添加到另一列表并返回 rpushkeyvalue1[value2]在列表中添加一个或多个值 rpushxkeyvalue为已存在的列表添加值
set(集合)
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经存在集合中返回0,key对应的set不存在返回错误。
saddkeymember
实例
redis127.0.0.1:6379>saddredis.net.cnredis
(integer)1
redis127.0.0.1:6379>saddredis.net.cnmongodb
(integer)1
redis127.0.0.1:6379>saddredis.net.cnrabitmq
(integer)1
redis127.0.0.1:6379>saddredis.net.cnrabitmq
(integer)0
redis127.0.0.1:6379>smembersredis.net.cn
1)"rabitmq"
2)"mongodb"
3)"redis"
注意:以上实例中rabitmq添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为232-1(4294967295,每个集合可存储40多亿个成员)。
常用操作命令如下:
saddkeymember1[member2]向集合添加一个或多个成员 scardkey获取集合的成员数(size) sdiffkey1[key2]返回给定所有集合的差集 集合A={1,2,3,4,5}集合B={2,3,6,8} A∩B={2,3} A∪B={1,2,3,4,5,6,8} A-B(差集)={1,4,5,6,8} {1,4,5}√ uplooking01:6379>sdiffAB 1)"1" 2)"4" 3)"5" sdiffstoredestkey1[key2]返回并保存给定集合差集保存到dest中 uplooking01:6379>sdiffstoretmpAB (integer)3 uplooking01:6379>smemberstmp 1)"1" 2)"4" 3)"5" sinterkey1[key2]返回给定集合的交集 uplooking01:6379>sinterAB 1)"2" 2)"3" sinterstoredestkey1[key2]返回并保存给定集合的交集到dest中 sismemberkeymember判断member元素是否是集合key的成员 uplooking01:6379>sismemberA3 (integer)1 uplooking01:6379 smemberskey返回集合中所有成员 smovesrcdestmember将member元素从src移动到dest中 spopkey移除并返回集合中的一个随机元素 srandmemberkey[count]返回集合中一个或多个随机数 随机返回集合key中的count个元素,没有count,返回1个 uplooking01:6379>srandmemberA "1" uplooking01:6379>srandmemberA2 1)"3" 2)"4" sremkeymember1[member2]移除集合中一个或多个成员 sunionkey1[key2]返回所有给定集合的并集---就是数学中的并集的概念 uplooking01:6379>sunionAB 1)"1" 2)"2" 3)"3" 4)"4" 5)"5" 6)"6" 7)"8" sunionstoredestkey1[key2]返回并保存给定集合的并集到dest sscankeycursor[matchpattern][countcount]迭代集合中的元素
zset(有序集合)
Rediszset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd命令添加元素到集合,元素在集合中存在则更新对应score
zaddkeyscoremember
实例
redis127.0.0.1:6379>zaddredis.net.cn0redis
(integer)1
redis127.0.0.1:6379>zaddredis.net.cn0mongodb
(integer)1
redis127.0.0.1:6379>zaddredis.net.cn0rabitmq
(integer)1
redis127.0.0.1:6379>zaddredis.net.cn0rabitmq
(integer)0
redis127.0.0.1:6379>ZRANGEBYSCOREredis.net.cn01000
1)"redis"
2)"mongodb"
3)"rabitmq"
常用操作命令如下:
zaddkeyscore1member1[score2member2]想有序集合添加一个或多个成员, 或是更新已经存在成员的分数 uplooking01:6379>zaddwebsite0.01www.uplooking.com (integer)1 uplooking01:6379>zaddwebsite0.05www.baidu.com (integer)1 uplooking01:6379>zaddwebsite0.1www.google.com (integer)1 uplooking01:6379>zaddwebsite1www.taobao.com (integer)1 uplooking01:6379>zaddwebsite0.005www.jd.com (integer)1 zcardkey获取有序集合的成员数 uplooking01:6379>zcardwebsite (integer)5 zcountkeyminmax计算在有序集合中指定区间分数的成员数 获取分数区间[min,max]中元素 uplooking01:6379>zcountwebsite0.010.1 (integer)3 zincrbykeyincrementmember有序集合中对指定成员的分数上增量incr uplooking01:6379>zincrbywebsite0.01www.uplooking.com "0.02" zinterstoredestnkeyskey[key..]计算给定的一个或多个有序集的交集并保存在新的有序集合dest中 zlexcountkeyminmax在有序集合中计算指定字典区间内成员数量 需要清楚的是 可以使用-代表,得分最小的元素,使用+代表得分最大的元素 zlexcountkey-+得到就是集合的size min===>[member1 max===>[member2 得到的元素个数就是在区间[member1,member2]内的元素个数 redis>ZADDmyzset1a2b3c4d5e6f7g (integer)7 redis>zrangemyzset0-1 1)"a" 2)"b" 3)"c" 4)"d" 5)"e" 6)"f" 7)"g" redis>ZLEXCOUNTmyzset-+ (integer)7 redis>ZLEXCOUNTmyzset[c+ (integer)5 redis>ZLEXCOUNTmyzset-[c (integer)3 redis> zrangekeystartstop[withscores]通过索引区间返回有序集合成指定区间内的成员 特殊的一个写法zrangekey0-1返回所有的元素 zrangebylexkeyminmax[limitoffsetcount]通过字典区间返回有序集合的成员 zrangebyscorekeyminmax[withscores][limit]通过分数返回有序集合指定区间内的成员 zrankkeymember返回有序集合中指定成员的索引 zremkeymember[member...]移除有序集合中的一个或多个成员 返回1,删除成功,返回0,没有这个元素 zremrangebylexkeyminmax移除有序集合中给定的字典区间的所有成员 zremrangebyrankkeystartstop移除key中给定的排名区间的所有成员 排名就是索引 zremrangebyscorekeystartstop移除key中给定的分数区间的所有成员 分数就是score zrevrangekeystartstop[withscores]返回有序key中指定区间内的成员,通过索引,分数从高到低 和zrangekeystartstop反过来 zrevrangebysocrekeymaxmin[withscores]返回有序key中指定分数区间内的成员,通过索引,分数从高到低 zrevrankkeymemeber返回key中指定成员的排名,key成员按分数值递减排序 zscorekeymember返回key中member的分数 zunionstoredestnumkeyskey[key...]计算给定的一个或多个有序集的并集,并存储到新的dest中 zscankeycursor[matchpattern][countcount]迭代有序集合中的元素(包括元素成员和元素分值) uplooking01:6379>zscanwebsite1 1)"0" 2)1)"www.jd.com" 2)"0.0050000000000000001" 3)"www.uplooking.com" 4)"0.02" 5)"www.baidu.com" 6)"0.050000000000000003" 7)"www.taobao.com" 8)"1"
Redis常见命令
keys*
列举出所有的key
typekey
获取对应key的数据类型
select[0-15]
切换到某一个数据库中
renameoldKeynewKey
将oldKey重命名为newKey
终端中属于密码的两种方式:
第一种:
连接的时候:redis-3.2.0]#src/redis-cli-huplooking03-auplooking
第二中:
登陆之后再输入密码:
authuplooking(密码)
停止redis服务的命令:
src/redis-cli-huplooking01-p6379shutdown
1、键值相关命令
keys*取出当前所有的key
existsname查看redis是否有name这个key
delname删除keyname
expireconfirm100设置confirm这个key100秒过期
ttlconfirm获取confirm这个key的有效时长
select0选择到0数据库redis默认的数据库是0~15一共16个数据库
moveconfirm1将当前数据库中的key移动到其他的数据库中,
persistconfirm移除confirm这个key的过期时间
randomkey随机返回数据库里面的一个key
renamekey2key3重命名key2为key3
typekey2返回key的数据类型
2、服务器相关命令
pingPONG返回响应是否连接成功
echo在命令行打印一些内容
select0~15编号的数据库
quit /exit退出客户端
dbsize返回当前数据库中所有key的数量
info返回redis的相关信息
configgetdir/*实时传储收到的请求
flushdb删除当前选择数据库中的所有key
flushall删除所有数据库中的数据库