【redis简介】
redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为redis的key可以包含string、hash、list、set和zset。这些数据都支持push/pop、add/remove以及取交集并集等丰富的操作。redis支持各种不同方式的排序。为了保证效率,数据都是写入内存中,它可以周期性的把更新的数据写入到磁盘或者把修改的操作写入到追加的记录文件中。
【redis适用场合】
取最新N个数据的操作
排行榜应用,去topN操作
需要设置精确的过期时间的应用
计数器的应用
uniq操作,去重
实时系统,反垃圾系统
pub(发布)/sub(订阅)构建实时消息系统
构建队列系统
缓存
【redis的string数据类型】
1.set:设置值,成功返回OK
127.0.0.1:6379> set name hucc OK 127.0.0.1:6379>
2.get:获取key对应的值,如果key存在,返回对应的value,如果不存在,返回nil
127.0.0.1:6379> get name "hucc" 127.0.0.1:6379> get name1 (nil) 127.0.0.1:6379>
3.setnx(set not exits):只有在key不存在时才做插入操作。
如果key存在,不插入,返回0。
如果key不存在,插入,返回1。
127.0.0.1:6379> setnx name hcc (integer) 0 127.0.0.1:6379> setnx name1 hcc (integer) 1 127.0.0.1:6379>
4.setex:为key设置值,同时指定key的生存时间。格式:set key time value
127.0.0.1:6379> setex name 10 hucc OK 127.0.0.1:6379>
上述例子:name这个key只存在10秒钟,10秒后自动销毁。
5.setrange:设置指定key的value值的子字符串。格式:setrange key num value
127.0.0.1:6379> set email hucc@163.com OK 127.0.0.1:6379> get email "hucc@163.com" 127.0.0.1:6379> setrange email 5 126.com (integer) 12 127.0.0.1:6379> get email "hucc@126.com" 127.0.0.1:6379>
从上述例子可以看出,setrange的功能是将163.com替换成了126.com。即email的第5位开始,执行成功后会返回字符串的长度。但是:看下面的例子
127.0.0.1:6379> get email "hucc@126.com" 127.0.0.1:6379> setrange email 5 qq.com (integer) 12 127.0.0.1:6379> get email "hucc@qq.comm" 127.0.0.1:6379>
为什么将126.com替换成qq.com的时候多了一个m,因为setrange只会替换掉你指定的字符串的长度的字符串,说白了就是qq.com会替换掉126.co这6个字母,剩下的m会保留。
6.mset:一次性设置多个key和value,如果返回1,则都成功,如果返回0,则都失败。
127.0.0.1:6379> mset name1 hucc1 name2 hucc2 OK 127.0.0.1:6379> get name1 "hucc1" 127.0.0.1:6379> get name2 "hucc2" 127.0.0.1:6379>
7.msetnx:同理,不解释
8.getset:获取旧值并且设置新值
127.0.0.1:6379> set val 20 OK 127.0.0.1:6379> getset val 30 "20" 127.0.0.1:6379> get val "30" 127.0.0.1:6379>
9.getrange:获取子字符串。格式:getrange email begin end
127.0.0.1:6379> get email "hucc@yahoo.com" 127.0.0.1:6379> getrange email 1 5 "ucc@y" 127.0.0.1:6379>
10.mget:批量获取
127.0.0.1:6379> mget name name1 name2 name3 1) (nil) 2) "hucc1" 3) "hucc2" 4) "hucc3" 127.0.0.1:6379>
11.incr:自增,++。如果key不存在,则默认key的value值为0
127.0.0.1:6379> get val "30" 127.0.0.1:6379> incr val (integer) 31 127.0.0.1:6379> 127.0.0.1:6379> incr a (integer) 1 127.0.0.1:6379>
12.incrby:自增多少次,接参数,如果参数为5,则自增5次,如果为-5,则自减5次。
127.0.0.1:6379> get val "20" 127.0.0.1:6379> incrby val 5 (integer) 25 127.0.0.1:6379> incrby val -5 (integer) 20 127.0.0.1:6379>
13.decr、decrby,自减操作,和incr、incrby对立。
14.append:给指定的key后面添加值,返回新字符串的长度
127.0.0.1:6379> set name hucc OK 127.0.0.1:6379> append name " is a handsome boy" (integer) 22 127.0.0.1:6379> get name "hucc is a handsome boy" 127.0.0.1:6379>
15:strlen:获取指定key的值的长度。
127.0.0.1:6379> set name "hucc is a handsome boy" OK 127.0.0.1:6379> strlen name (integer) 22 127.0.0.1:6379>
【redis的hash数据类型】
hash是string类型的field和value的映射表,它的添加和删除都是o(1)。hash特别适用于存储对象,相比string把每个字段都存储成单个string类型,将一个对象都存储在hash中将更省内存,并且更加的方便存取整个对象。说白了就是string存储单个属性,hash适合存储整个对象。
1.hset:hash的设置方法。hset table field value(相当于与设置了对象一个属性,还能往里面添加)。
127.0.0.1:6379> hset person name hucc (integer) 1 127.0.0.1:6379> hset person age 22 (integer) 1 127.0.0.1:6379> hset person saraly 9000 (integer) 1
2.hsetnx,类似setnx。
3.hmset,类似mset
127.0.0.1:6379> hmset user:001 name hucc age 21 saraly 9000 OK 127.0.0.1:6379>
4.hincrby
5.hexits:查看某一个字段是否存在
6.hlen:查看某个对象里面的字段的数量
7.hdel:删除某个字段
8.hkeys:返回对象中所有的字段名。
9.hvals:返回对象中所有的value值。
10.hgetall:获取某个hash中全部的key和value,这个最好用
127.0.0.1:6379> hgetall user:001 1) "name" 2) "hucc" 3) "age" 4) "21" 5) "saraly" 6) "9000" 127.0.0.1:6379>
【redis的list数据类型】
redis的list是一个链表结构,key是链表的名称,每一个子元素都是string类型的双向链表。可以通过push和pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,也可以作为队列。
1.lpush:从链表的头部压入一个元素
127.0.0.1:6379> lpush list1 hello (integer) 1 127.0.0.1:6379> lpush list1 world (integer) 2
2.lrange:从指定链表的表头向表位方向取元素,范围为(start,stop)包含了start和stop两个元素。
命令:lrange key start stop
start和stop都是数字
0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
取出所有元素的办法:lrange list 0 -1
127.0.0.1:6379> lrange list 0 -1 1) "world" 2) "hello" 127.0.0.1:6379>
3.rpush:每次从链表的尾部压入元素。
lpush配合lrange可以实现栈的效果
rpush配合lrange可以实现队列的效果
4.linsert:往链表的指定位置插入元素
127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "world" 127.0.0.1:6379> linsert list before world hucc (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hucc" 3) "world" 127.0.0.1:6379>
5.lset:替换掉链表指定下标的元素的值。LSET key index value
127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hucc" 3) "world" 127.0.0.1:6379> (error) ERR unknown command ‘hello‘ 127.0.0.1:6379> 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hucc" 3) "world" 127.0.0.1:6379> lset list 1 hucoco OK 127.0.0.1:6379> lrange list 0 -1 1) "hello" 2) "hucoco" 3) "world" 127.0.0.1:6379>
6.LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的元素。
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> lrange list 0 -1 1) "one" 2) "two" 3) "three" 4) "one" 127.0.0.1:6379> lrem list -1 "one" (integer) 1 127.0.0.1:6379> lrange list 0 -1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379>
上述例子:从尾部开始删除一个one
7.LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
参数和lrange的参数是一样的意思。
127.0.0.1:6379> ltrim list 0 1 OK 127.0.0.1:6379> lrange list 0 -1 1) "one" 2) "two" 127.0.0.1:6379>
上述例子只想保留第一个和第二个元素。
8.lpop与rpop;分别是从头和从尾部弹出一个元素。并且返回这个元素的值。
9.rpoplpush list1 list2
命令 rpoplpush 在一个原子时间内,执行以下两个动作:
将列表 list1 中的最后一个元素(尾元素)弹出,并返回给客户端。
将 list1 弹出的元素插入到列表 list2 ,作为 list2 列表的的头元素。
10.lindex key index:获取链表指定下标的元素的内容
11.llen key:返回链表的长度。
本文出自 “陌途” 博客,请务必保留此出处http://flycc258.blog.51cto.com/8624126/1622958
原文:http://flycc258.blog.51cto.com/8624126/1622958