一、什么是Redis?
Redis是一款内存高速缓存数据库,开源BSD许可高级的key-value存储系统;它支持丰富的数据结构(类型),比如String list hash set 可以持久化,保证数据安全。
1.1、什么是持久化?
redis一别运行一别把数据保存在硬盘中一份,当服务器重新启动时,会把硬盘中的内容重新发送给内存中!
1.2、redis和memcache比较?
(1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash的数据结构的存储;
(2)Redis支持meater-slave(主-从)模式应用;
(3)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;
(4)Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。
(5)redis可以用来做存储(storge),而memcached是用来做缓存的(cache)
这个特点主要因为其有“持久化”的功能
(6)存储的数据有“结构”,对于memcached来说,存储数据,只有1中类型---“字符串”
而redis则可以存储字符串,链表,哈希结构,集合,有序集合
二、具体使用?
flushdb : 清空所有数据
2.1、key的操作
通用的key操作:key * 【查询所有的key】、randomkey 【返回随机的key】、del key 【删除一个key】、renamenx key newkey 【把key 改为 newkey】成功为1,不成功为0、redis中默认有16个数据库可以用 【select 加数字】来切换数据库、persist key [把指定key设置为永久有效]
在redis里边,除了“\n”和“空格”不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字的长度不做要求。
2.2、Redis字符串类型的操作
2.2.1、set key value [ex 秒数] /【px 毫秒数】 【nx】/【xx】注:ex,px同时写以后面的有效期为准
【nx】:表示key不存在时执行操作;【xx】:表示key存在时操作;
2.2.2、mset multi set ,一次性设置多个键值 例如:mset key1 v1 key2 v2;
2.2.3、get key 作用获取key值;
2.2.4、mget key1 key2 ... keyn 作用获取多个key的值;
2.2.5、setrange key offest value 作用把字符串的offest 偏移字节,改成value ;
注意:如果偏移量>字符长度,该字符自动补【\0x00】;
2.2.6、append key value 作用:把value追缴到key的原值上;
2.2.7、getrange key start stop 作用:获取字符串中【start,stop】范围的值;
注意:start>=length,返回空字符串;stop>=length,截取至字符结尾;如果start所在位置在stop右边,返回空字符串;
2.2.8、getset key newvalue 作用:获取并返回旧值,设置新值;
2.2.9、incr key 作用:指定key的值加1,并且返回加1后值; decr 与它相反;
2.2.10、incrby key 作用:指定的key的值加指定的数据 ; decrby:与它相反;
2.2.11、setbic key offset value 设置offset对应二进制为上的值
注意:如果offset过大,则会在中间填充0; offset最大为(2^32-1)最大的字符串为512兆;
2.3、link 链表结构
2.3.1、lpush key value 作用:把值插入到链接头部 rpush:与其相反;
2.3.2、rpop key 作用:返回并删除链表尾元素 lpop :与其相反;
2.3.3、lrange key start stop 作用:返回链表中【start,stop】中的元素 规律:左数从0开始,右数从-1开始;
2.3.4、lrem key count value 作用:从key链表中删除value值
注:删除count 的绝对值个value后结束; count>0 从表头删除; 【大白话】:count是要删除几个value以后就结束;
2.3.5、ltrim key start stop 作用:剪切key对应的连接,切【start,stop】一段,并把该段重新赋给key;
2.3.6、lindex key index 作用:返回index索引的值;
2.3.7、llen key 作用:计算链接表的元素个数;
2.3.8、linsert key after | before search value 作用:在key链表中寻找‘search’,并在search值之前|之后,插入value;
注:一旦找到一个search后,命令就结束了,因此不会插入多个value
2.3.9、rpoplpush source desc 作用:把source的尾部拿出来放在desc的头部,并返回该单元值;
2.3.10、brpop,blpop key timeout 作用:等待弹出key的尾/头元素,timeout为等待超时间,如果timeout为0,则一直等待;
运用场景:长轮询Ajax,在线聊天时,能够用到!
2.4、无序集合 set 相关命令
集合的性质:唯一性,无序性,确定性;
注:在string和link的命令中,可以通过range来访问string中的某几个字符或某几个元素,但,因为集合的无序性,无法通过下标或范围来访问部分元素,因此,想看元素,要么随机先一个,要么全选;
2.4.1、sadd key value1 value2 作用:往集合key中增加元素;
2.4.2、srem value1 value2 作用:删除集合中集value1 value2 的元素; 返回值:忽略不存在的元素后,真正删除掉的元素的个数;
2.4.3、sraddmember key 作用:返回集合key中随机1个元素;
2.4.4、spop key 作用:返回并删除集合中key中1个随机元素;
随机-----体现了无序性
2.4.5、sismember key value 作用:判断value是否在key集合中 是返回1,否返回0;
2.4.6、smembers key 作用:返回集合中所有的元素;
2.4.7、scard key 作用:返回集合中元素的个数;
2.4.8、smove source dest value 作用:把source中的value删除,并添加到dest集合中;
2.4.9、sinter key1 key2 key3 作用:求出key1 key2 key3三个集合中的交集,并返回;
2.4.10、sinterstore dest key1 key2 key3 作用:三个集合中的交集,并赋给dest;
2.4.11、suion key1 key2 ... keyn 作用:求出key1 key2 keyn的并集,并返回;
2.4.12、sdiff key1 key2 key3 作用:求出key1与key2 key3 的差集;
2.5、有序集合 order set
2.5.1、zadd key score1 value1 score2 value2 作用:添加元素;
2.5.2、zrem key value1 value2... 作用:删除集合中元素;
2.5.3、zremrangebyscore key start end 作用:按照score来删除元素,删除score在【min,max】之间的;
2.5.4、zremrangebyrank key start end 作用:按排名删除元素,删除名次在【start,end】之间的;
2.5.5、zrank key member 作用:查询member的排名(升续 0名开始)
2.5.6、zrevrank key member 作用:查询member的排名(降续 0名开始)
2.5.7、zcard key 作用:返回元素个数;
2.5.8、zcount key min max 作用:返回【min,max】区间内元素的数量 ;
2.5.9、zinterstore destination numkeys key1 【key2....】
【WEIGHTS weight [weight ....]】 weights 权重;
【AGGREGATE SUM[MIN | MAX]】 aggregate 聚合;
实例:如下
2.6、Hash 哈希数据类型相关命令
2.6.1、hset key field value 作用:把key中field域的值设为value;
注:如果没有field域,直接添加,如果有,则覆盖原来field域的值;
2.6.2、hmset key field1 value1 【fieldn valuen】 作用:设置field1->N个域,对应的值是value1->N;
2.6.3、hget key field 作用:返回key中field 域的值;
2.6.4、hmget key field1 field2 fieldn 作用:返回key中field1 fieldn域的值;
2.6.5、hlen key 作用:返回key中元素的数量;
2.6.6、hexists key 作用:判断key中有没有field的域;
2.6.7、hinrby key field value 作用:把key中的field域的值增长整型值value;
2.6.8、hinrby float key field value 作用:把key中的field域的值增长浮点值value;
2.6.9、hkeys key 作用:返回key中所有的field;