【redis】跟着redis tutorial的基本学习

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官网

                                          





      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值