Redis基础

Redis是什么?

是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

Redis与其他key-value缓存特点?

1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

3.Redis支持数据的备份,即master-slave模式的数据备份

用途

1.内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

2.取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面

3.模拟类似于HttpSession这种需要设定过期时间的功能

4.发布、订阅消息系统

Redis数据类型(https://www.cnblogs.com/ysocean/p/9102811.html

每种数据类型内部对应两种编码

Redis key键的常用:keys * 所有键, exists key的名字,判断某个key是否存在, move key db   --->当前库就没有了,被移除了, expire key 秒钟:为给定的key设置过期时间, ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期, type key 查看你的key是什么类型,

Redis string(最大不能超过512M)的常用: set/get/del/append/strlen,Incr/decr/incrby/decrby,一定要是数字才能进行加减, getrange/setrange, mset/mget/msetnx(带m的是more的缩写意思是获得多个)

字符串对象的编码可以是int,raw或者embstr。

       1、int 编码:保存的是可以用 long 类型表示的整数值。

  2、raw 编码:保存长度大于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。

  3、embstr 编码:保存长度小于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。

Redis 列表(list): lpush/rpush/lrange(这种可以想象成以队列形式进栈,栈首尾是通的,然后根据从上还是下遍历或者出栈), lpop/rpop, lindex,按照索引下标获得元素(从上到下), linsert key  before/after 值1 值2, lrem key 删N个value

列表对象的编码可以是 ziplist(压缩列表) 和 linkedlist(双端链表)。 

当同时满足下面两个条件时,使用ziplist(压缩列表)编码:

  1、列表保存元素个数小于512个

  2、每个元素长度小于64字节

  不能满足这两个条件的时候使用 linkedlist 编码。

Redis集合(Set): sadd/smembers/sismember, srem key value 删除集合中元素, srem key value 删除集合中元素,两个集合的运算:差集:sdiff,交集:sinter,并集:sunion。

集合对象的编码可以是 intset 或者 hashtable。

当集合同时满足以下两个条件时,使用 intset 编码:

  1、集合对象中所有元素都是整数

  2、集合对象所有元素数量不超过512

  不能满足这两个条件的就使用 hashtable 编码。第二个条件可以通过配置文件的 set-max-intset-entries 进行配置。

Redis哈希(Hash):value是键值对的集合,  hset/hget/hmset/hmget/hgetall/hdel, hexists key 在key里面的某个值的key, hkeys/hvals。。常用来存储user这种对象name:xx age :13

哈希对象的编码可以是 ziplist 或者 hashtable。

和上面列表对象使用 ziplist 编码一样,当同时满足下面两个条件时,使用ziplist(压缩列表)编码:

  1、列表保存元素个数小于512个

  2、每个元素长度小于64字节

  不能满足这两个条件的时候使用 hashtable 编码。第一个条件可以通过配置文件中的 set-max-intset-entries 进行修改。

redis有序集合对象:在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 (score可以重复)v2。 zadd/zrange, zrem key 某score下对应的value值,作用是删除元素。 zrevrangebyscore  key 结束score 开始score。

有序集合的编码可以是 ziplist 或者 skiplist。ziplist 编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个节点保存元素的分值。并且压缩列表内的集合元素按分值从小到大的顺序进行排列,小的放置在靠近表头的位置,大的放置在靠近表尾的位置

 当有序集合对象同时满足以下两个条件时,对象使用 ziplist 编码:

  1、保存的元素数量小于128;

  2、保存的所有元素长度都小于64字节。

  不能满足上面两个条件的使用 skiplist 编码。以上两个条件也可以通过Redis配置文件zset-max-ziplist-entries 选项和 zset-max-ziplist-value 进行修改。

五大数据应用场景:

  对于string 数据类型,因为string 类型是二进制安全的,可以用来存放图片,视频等内容,另外由于Redis的高性能读写功能,而string类型的value也可以是数字,可以用作计数器(INCR,DECR),比如分布式环境中统计系统的在线人数,秒杀等。

  对于 hash 数据类型,value 存放的是键值对,比如可以做单点登录存放用户信息。

  对于 list 数据类型,可以实现简单的消息队列,另外可以利用lrange命令,做基于redis的分页功能

  对于 set 数据类型,由于底层是字典实现的,查找元素特别快,另外set 数据类型不允许重复,利用这两个特性我们可以进行全局去重,比如在用户注册模块,判断用户名是否注册;另外就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

  对于 zset 数据类型,有序的集合,可以做范围查找,排行榜应用,取 TOP N 操作等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值