前言:redis现在可是就业面试的重中之重了,不得不深度了解学习一下了。
一、概述
1.什么是Redis?
远程字典服务。由C语言编写,支持网络,可基于内存亦可持久化的日志型。提供多种语言的API。也被人们称之为结构化数据。
2.Redis可用来做什么?
根据官方文档介绍,redis可以用作数据库、缓存、消息队列
1.内存存储、持久化,内存中数据是断电即失。所以说持久化很重要
2.效率高,用于高速缓存,一秒钟可支持10万次读操作,8万次写操作
3.发布订阅信息,微博推送、微信公众号等
4.地图信息分析,使用geo数据类型,支持经纬度存储,可计算位置等
5.计时器,计数器
3.Redis的特性?
性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s
丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes,
Sets 及Ordered Sets 数据类型操作。还有一些特殊的数据类型
3.原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,通过 MULTI 和 EXEC指令包起来。redis中的事务不保证原子性
4.丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
5.持久化存储
6.可以搭建集群
4.Redis基础知识
redis默认有16个数据库,默认使用第0个。(编号0-15)
使用select 编号 命令可以切换数据库
dbsize 命令查看当前数据库存储数据的大小
flushdb 命令清空当前数据库
flushall 命令清空所有的数据库
Redis是单进程单线程的。Redis是基于内存操作的,CPU不是Redis的性能瓶颈,Redis的瓶颈是根据内存和网络带宽决定的。那么既然可以使用单线程实现,那就使用单线程。利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销
Redis是单线程的,速度为什么这么快?
redis将所有的数据全部放在内存中,所以说使用单线程去操作的效率就是最高的。多线程存在CPU上下文切换,对于内存系统来说,没有上下文切换的效率就是最高的。多次读写都是在一个CPU上,在内存中这个就是最佳方案
二、数据类型
1.五大基本数据类型
a.字符串(String)
//常用的APIset key value 设置键和值get key 取值append key value 往key中追加值strlen key 获取当前字符串的长度incr key 当前键对应的值加1decr key 当前键对应的值减1incrby key 10 当前键对应的值加10decrby key 10 当前键对应的值减10getrange key 0 3 截取【0,3】的字符串内容setrange key 1 xx 将字符串中下标为1的内容替换成xxsetex key 5 value (set with expire) #设置过期时间setnx (set if not exist) #如果不存在则设置值mset k1 v1 k2 v2 k3 v3 批量存储mget k1 k2 k3 批量获取msetnx k1 v1 k4 v4 #由于k1存在,所以会导致操作失败。因为msetnx是原子操作#设置对象set user:1 {
name:zhangsan,age:3}mset user:1:name zhangsan user:1:age 2getset key value #先get再set
String使用场景:字符串中的value值可以是字符串也可以是数字(Integer)
计数器
对象缓存存储
b.列表(List)
//常用APIlpush key value #将值插入到列表的头部lrange key 0 2 # 获取指定范围的值rpush key value #将值插入列表的尾部lpop key #从左侧弹出值rpop key #从右侧弹出值lindex key 1 #通过下标获得list中的某一个值llen key #返回列表长度lrem key 2 value # 从List移除2个value值ltrim key 1 2 # 通过下标截取指定长度,List被改变,只剩下截取的元素rpoplpush mylist myotherlist #移除列表的最