redis详解

1.1.1redis介绍

     Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可 基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的 开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

redis能做什么?

1. 内存存储,持久化,断电即丢失,所以持久化很重要,redis采用两种机制(RDB和AOF)

2. 效率高,可以用于高速缓存

3. 发布订阅系统

4. 地图信息分析

5. 计数器等,网站浏览量

redis特点/特性

1. 多样的数据类型

2. 持久化

3. 集群

4. 事务等...

1.1.2NoSQL特点

扩展方便,数据与数据之间没有必然联系,0耦合。

大数据量和高性能(redis => 单秒写10万次 读取11万次) QPS

数据类型的多样化(5+3) String、List、Set、Hash、Zset | geo(地理位置信息) 、hyperloglog(访 客信息)、bitmap 位图(常用计算活跃粉丝和不活跃粉丝、登录和未登录、是否打卡等)

不需要提前设计数据库,随取随用。

1.1.3NoSQL的四大类

KV类型

- 新浪 redis

- 美团 Redis + Tair

- 阿里、百度 redis + memcached

档类型数据库(BSON 和 JSON一样)- MongoDB (目前企业需求也是比较大的) 是一个给予分布式存储的数据库,主要用于处理大量的文档, 是一个介于关系型和非关系型数据库的中间产品,本身属于非关系型。

列存储的数据库

- 大数据的HBase

- 分布式文件系统(一个业务分拆多个子业务,部署在不同的服务器上)

图形关系数据库

- 图示 - 存储的是图形关系,类似与朋友圈或社交平台

- Neo4J InfoGrid

1.1.4关于redis线程问题

redis的单线程的,那么单线程为什么还这么快?

Redis 的数据结构并不全是简单的 Key-Value,还有 list,hash 等复杂的结构。这些结构有可能会进行很细 粒度的操作,比如在很长的列表后面添加一个元素,在 hash 当中添加或者删除一个对象。这些操作可能就 需要加非常多的锁,导致的结果是同步开销大大增加。

总之,在单线程的情况下,代码更清晰,处理逻辑更简单,不用去考虑各种锁的问题,不存在加锁释放锁操 作,没有因为可能出现死锁而导致的性能消耗,不存在多进程或者多线程导致的切换而消耗 CPU。

单线程多进程的集群方案

单线程的威力实际上非常强大,每核效率也非常高。多线程自然是可以比单线程有更高的性能上限,但是在 今天的计算环境中,即使是单机多线程的上限也往往不能满足需要了,需要进一步摸索的是多服务器集群化 的方案,这些方案中多线程的技术照样是用不上的。所以单线程、多进程的集群不失为一个时髦的解决方 案。

CPU 消耗

采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU。 但是如果 CPU 成为 Redis 瓶颈,或者不想让服务器其他 CPU 核闲置,那怎么办?

可以考虑多起几个 Redis 进程,Redis 是 key-value 数据库,不是关系数据库,数据之间没有约束。只要客 户端分清哪些 key 放在哪个 Redis 进程上就可以了。

2.1redis 基础命令

2.1.1数据库切换操作

 2.1.2 查看当前数据库

 2.1.3清除数据库中的数据

flushdb 删除当前库 -- 前提进入当前数据库中

flushall 删除所有库

2.1.4设置过期时间

 2.1.5查看key类型

type key

2.1.6 查看key是否存在

EXISTS key

3.1redis数据类型

redis存在5种基本数据类型和三种特殊类型

3.1.2String类型

例举:分布式锁、Session相关、验证码相关、计数相关(点击量/阅读量/关注)等单一的值。

3.1.3取值赋值

关键词:set get append strlen

3.1.4加减操作

 increment 自增1 decrement 自减

incrby 固定增量 自定义

decrby 固定减量 自定义

3.1.5范围操作 range

getrange key index1 index2 获取当前指定范围 如果最大长度 index2 可替为-1

3.1.6替换操作

setrange key offset index 内容 ##offset 偏移量 指定位置开始替换

 

 3.1.7判断是否存在

EXISTS t6 判断值是否存在

#set with expire #如果存在设置消失时间及信息值 -- 订单

setex key time v 既能增加过期时间还能够重新指定新的值,如果当前key不存在创建一个新的key和值并指定过期时间

 #set if not expire #如果不存在 默认会创建一个新的,存在不操作 / 及判断存在不存在同时也能根据结 果进行进一步操作 setnx key v

 3.1.8批量值操作

more set

mset k1 v1 k2 v2

mget k1 k2

3.1.9关于对象的存储

 3.2.1取值赋值操作

 getset 先取值,再赋值

3.2.2关于浮点类型的增减操作

 3.2.3删除数据

 del key ...

4.1.1List列表类型

list列表类型,特点:所有的命令操作都是使用l开始。 和链表/队列比较相似,可以通过首尾进行操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值