【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 [email protected] OK 127.0.0.1:6379> get email "[email protected]" 127.0.0.1:6379> setrange email 5 126.com (integer) 12 127.0.0.1:6379> get email "[email protected]" 127.0.0.1:6379>
从上述例子可以看出,setrange的功能是将163.com替换成了126.com。即email的第5位开始,执行成功后会返回字符串的长度。但是:看下面的例子
127.0.0.1:6379> get email "[email protected]" 127.0.0.1:6379> setrange email 5 qq.com (integer) 12 127.0.0.1:6379> get email "[email protected]" 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 "[email protected]" 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>
【未完待续...】