1.简单介绍
参看 redis 官网 :An introduction to Redis data types and abstractions
·特点:redis是一个开源的,保存在内存的(in-memory)数据结构存储(data structure store),被用作数据库、缓存、消息代理(message broker)。是一种Key-Value数据库,通常也被称为NoSql数据库(not only sql)。
·支持的数据结构(前五个是最基本的):strings / hashes / lists / sets / sorted sets with range queries(支持范围查询的已排序 set) /bitmaps 等
2.数据结构存储操作 (通常返回 ok 如果返回 1则代表成功 ,0代表失败 也会返回nil )
2.1 string :字符串,Memcached 中的唯一一个数据类型。string :string(key :value),value不能超过512MB
★设置/获取键值对(set/get):
set name corki //设置名称为corki
get name //获取name键中保存的值
set name corki nx //如果name这个键存在则无法保存,返回 nil
set name corki xx //如果name 这个键不存在则无法保存,返回 nil
★设置/获取多个键值对(mset/mget):
mset a 111 b 222 c 333 //同时设置多个key-value
mget a b c//同时获取多个key对应的value,返回包含值得数组
★对于键为integer类型的键值对/或者是不存在的键,可以对其进行加减操作:incr /decr incrby/decrby 删除键值对:del 如果不存在则设置键值对:setnx 设置已存在的键值对,返回初始值getset
//incr incrby del
set age 16
incr age //age 变为17
del age // 删除age 返回 1说明删除成功
//incrby
set count 10
incrby count 10 //count 变为20
//decr decrby
set howlong 100
decrby howlong 20 // howlong 变为80
del howlong
set user scott
setnx user tiger//返回0,说明没有设置成功
setnx password 123 //返回1,说明设置成功
set y 10
getset y 20 //设置y 为20并返回之前的值10,如果之前不存在则返回nil
★判断是否存在(exists)
exists a //若返回1则说明存在,返回0说明不存在
★判断所存的类型(type)
set email yc@163.com
type email //返回string
type address //不存在该值 返回none
★设置过期时间(expire ex ttl) (pexpire pttl millionsecond级别)
set some itispity
expire some 5//返回1则说明设置成功,5秒后该值即不存在
get some//5秒后获取返回nil
set day 2016年3月14日 ex 10//设置存活时间10秒
ttl day //查看day剩余存活时间
2.2 lists:列表,redis中的list是链接列表(linked list)的实现,因为对于数据库系统而言,以很快的速度增加元素到很长的列表是很关键的。集合类型的数据会自动创建和删除键:即向list中push数据的时候,如果不存在则会先创建再push;pop数据,直到全部移除,则该list将会被自动删除,exists list 返回 0 ;对于一个空的list,如果调用一个只读命令,或者一个移除命令,都会有相同的结果,访问失败!
★添加元素(lpush,rpush)提取元素范围(lrange list fromindex endindex)
rpush namelist zhangsan //向list 的最右边(头部)插入数据 返回list中存的数目</span>
lpush namelist lisi //向lsit 的最左边(尾部)插入数据 :lisi zhangsan
lpush namelist wangwu //wangwu lisi zhangsan
lrange namelist 0 -1//从零开始取到最后一个;即wangwu lisi zhangsan ;-1指最后一个,-2倒数第二个,以此类推
另外 rpush/lpush 都属于复杂的命令,可以同时向列表中添加多条数据
lpush fruitlist banane apple watermelon//返回3
lrange fruitlist 0 -1//watermelon apple banane
★删除元素(lpop,rpop)
lpop fruitlist //返回watermelon
rpop fruitlist //返回banane
rpop fruitlist //返回apple
rpop fruitlist //返回空值 nil
★截取新的list(ltrim) :虽然和lrange有相似的功能,但是本质的区别在于ltrim将提取的元素范围作为一个新的list value,其他的都丢弃;而lrange仅仅只是显示;使用方法:lpush 一些数据 ,然后修剪这个list取前n条数据即可做到保存新数据,丢弃旧数据 ;有上限(capped)的lists :记住最新的前N条
lpush stringlist a b c d
ltrim stringlist 1 2//得到新的stringlist结果为 b c
★过滤掉重复的value(lrem key count value):count>0,从头到尾开始查找,去掉count个相同的key ;count<0 从尾到头开始查找,去掉count个相同的key ;count = 0 : 移除所有和value相同的值
rpush num 1 1 2 3 2 3
lrem num 2 1//将num中的前两个1过滤掉,结果为 2 3 2 3
lrem num 0 2 //将num中的所有值为2过滤掉,
★返回list的长度(llen list)
★删除集合(del list)
··lists典型应用场景:①记住社交网络上用户最新一次的更新 ②生产者和消费者之间的协调工作,实现队列
①使用ltrim 实现
②简单实现方法:入队列: 生产者调用lpush ; 出队列:消费者调用rpop (缺点:当 list 为空,而生产者不再入队列,则消费者 会一直等待并不断尝试rpop)
新的实现命令:brpop /blpop (解决办法 : 如果list 为空,并且超过了过期时间, 则会锁住)
rpush namelist zhangsan lisi wangwu
brpop namelist 5 //5为过期时间 ,如果namelist中有数据,则会先返回list本身,即返回 namelist ,然后结果返回wangwu ,如果namelist为空,则会倒数5秒,如果还没有数据则会返回nil
当然还有更 安全的方法去创建队列或者是旋转队列 :使用rpoplpush source destination:从source中pop,push到destination中 ,这个也存在一个含锁的命令:brpoplpush source destination (这两个命令相对于rpop/brpop都更加稳定,如果出现网络问题,也不会造成数据丢失)
rpush numlist one two three
rpoplpush numlist anothernumlist//从numlist最右边弹出数据,将弹出的数据lpush 到anothernumlist的最左边
2.3 Hashes : 键值对出现,所说的hash
★设置hashes (hset:设置单个pair / hmset:设置多个pairs)
hset user:100 name scott //设置单个pair ,设置成功,返回1
hmset user:101 name tiger age 23 sex man //设置多个字段 ,设置成功,返回ok
★获取hashes (hget:获取单个字段 hgetall:获取所有字段 hmget:列出需要返回的字段,返回的是一个值的数组)
hget user:101 name //返回tiger
hgetall user:101 //列出其中所有的字段值
hmget user:101 name age address//列出相应字段的值,如果不包含的字段则返回的nil
★整型累加(hincrby)
hincrby user:101 age 10 //输出 33
2.4 sets :字符串的无序集合 ,不包含重复元素
★ 设置无序sets ,获取sets中所有字符串,判断是否包含某字符串
sadd numset 1 2 3 //创建一个 sets ,返回 size
smembers numset //列出 sets中所有的值 ,无序的
sismember numset 3 // 判断sets中是否存在某值,存在返回1
sismember numset 4 //返回 0
★ 和对象相关联:实现 tags
sadd num:tags 2 6 9 //需要另一个数据结构如hashes 其中映射tag id 和tag name
smembers num:tags //
★ 随机删除sets中的字符串并返回删除的字符串 :spop
spop numset
★随机去除sets中的一个字符串
srandmember numset //随机去除一个元素,并返回
★ 将多个sets的并集存储到另一个sets :sunionstore
sunionstore anotherset numset // 将numset中的字符串集合拷贝到anotherset中
★获取sets的基数,即包含的字符串总数 scard (cardinality)
scard numset //返回3
2.5 sorted sets : 像是融合了一个set 和一个hash ,既保持元素唯一性,像是set,同时每个元素都和浮点值(score)相关联,所以说像是hash
★遵循如下两个规则
★★如果sorted sets 中的 A 和B两个元素的 A.score > B.score 那么 A >B
★★
★创建 sorted sets :zadd
zadd name 15 "lisi"
zadd name 12 "zhangsan"
zadd name 19 "wangwu"
★输出集合 zrange /zrevrange /zrangebyscore
zrange name 0 -1 //按给定的score顺序列出name的元素 ,值为 zhangsan lisi wangwu
zrevrange name 0 -1 //反向输出name 集合 值为 wangwu lisi zhangsan
zrange name 0 -1 withscores // 同时输出score
zrangebyscore name -inf 17 //显示低于(包含)17的人
★ 根据range 移除 :zremrangebyscore
zremrangebyscore name 11 12 //移除11 -12之间(包含)的人 //返回被移除的元素数量
★ 查询元素在sorted set 中的位置 : zrank /zrevrank
zrank name zhangsan //返回0
<以上只是学习的部分,不足的地方以后再补充~~简单学习> 可以参看这里:redis官网