【Redis--01,Redis基础概念、基础指令、数据类型】


今天主要是学习Redis的第一步,掌握Redis的基础概念包含基础指令,其次,我们需要掌握其全部数据类型,感兴趣的可以关注,后续会分类更新全部java的白话文教学内容;

接下来我们带着下面三个问题来学习今天的内容:
1、它是什么?
2、为什么要用它?
3、如何使用?

一、Redis是什么?

Redis:Remote Dictionary Server,即远程字典服务
是完全开源免费,用C语言编写的,是一个基于内存运行支持持久化高性能的(Key/Value)分布式内存数据库,也是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。
Redis与其他key-value缓存产品有以下三个优势:

  1. Redis支持数据持久化,可将内存中的数据持久化至磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的 key-value 类型数据,同时还提供list、set、zset、hash等数据结构的存储。
  3. Redis支持数据备份,即master-slave模式的数据备份。

(白话文: 说白了,Redis就是一种拥有存储数据的功能,比关系型数据库更加灵活、自由,通常情况用于进行缓存、分布式锁、计数器、消息队列等操作,而其中最主要的使用是:缓存,存储些临时的、频繁访问的数据,减少对后端数据库的访问,从而提高系统的响应速度和性能‌

二、为什么要使用Redis?

1. 使用的企业和人多,如果没人使用,我们也就不会使用它

2. 支持内存存储和持久化

Redis支持异步将内存中的数据写到硬盘上,同时不影响服务的正常运行。因为Redis交换数据快,所以在服务器中常用来存储一些临时的、需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,极大提升响应速度;

三、如何使用Redis?

3.1、Redis常识与基础命令

默认16个数据库,类似数组下标从0开始,初始默认使用1号库(索引为0)

基础命令如下:

select *              切换数据库  
dbsize                查看当前库的key的数量  
set  key vale         数据库存储值
get key               获取值  
exists key            判断是否存在该key值,存在该key值则返回1,不存在返回0
keys *                查看数据库所有的key      
flushdb               清空当前数据库      
flushall              清空所有数据库
expire key xxx        设置key值xxx秒过期        
ttl key               查看该key值剩余多少秒过期
persist key           取消过期                        
type key              查看当前key的类型         
面试题分享:Redis为什么是单线程的?

我看很多人都是这样回答的

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就 顺理成章地采用单线程的策略了。

其实也没错,但是不够细,面试还是需要比较细致的回答面试官问题的,所以我总结如下:

1. 多线程线程切换是需要时间成本的
2. 单线程避免了并发访问线程安全问题(锁竞争)
3. 单线程天然地保证了操作的原子性(Redis很多指令都是需要原子性操作)

3.2、数据类型

3.2.1、5大基础数据类型

String、List、Hash、Set、Zset

接下来我们就一个个的过:

1、String类型

使用场景: 常规key-value缓存应用、 常规计数器功能:微博数,粉丝数、访问量等

我们在工作中,估计80%都在使用String类型,而且很多人估计使用redis只会使用String

基本指令:

set key value                设置值        
get key                      获取值        
del key                      删除key
strlen key                   获取该key值对应的value值的长度        
append  key "xxx"            在该key对应的value值追加上xxx
incr key                     该key对应的value自增1        
decr key                     该key对应的value自减1
incrby key xx                设置自增步长,该key对应的value增加xx   
decrby key xx                设置自减步长,该key对应的value减少xx
getrange key x1 x2:          获取x1-x2范围内的值,类似between..and的关系,从零到负一表示全部

注意: String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字

2、List类型

使用场景: 栈、队列,如:浏览器历史记录、撤销操作等需要后进先出(LIFO)等

基本指令:

所有的list命令都是用l开头的

lpush  集合名  value                将xx插入到集合头部        
rpush  集合名  value                将xx插入到集合尾部
lrange 集合名  x y               获取集合里x-y(x、y代表下标)的值(0 -1为获取集合中所有的值)
lpop  集合名                     移除该集合的左值         
rpop  集合名                     移除该集合的右值
lindex  集合名  x                获取该集合中下标为x的值        
llen  集合名                     获取集合的长度
lset 集合名 index xx             将集合下标为index的值更新为xx(不能添加)
linsert  集合名  before yy xx    在集合中的yy值前面插入一个xx值
linsert  集合名  after  yy xx    在集合中的yy值后插入一个xx值

注意: List数据结构左右都可以插入数据、获取数据

3、Hash类型

使用场景: 对象的缓存等

基本指令:

hset key field value	            设置值	
hget key field	                    获取值	
hdel key field [field …]	        删除field	
hlen key	                        计算field个数	
hgetall field [field …]	            获取所有的field-value	
hmget field [field …]	            批量获取field-value	
hexists key field	                判断field是否存在	
hkeys key	                        获取所有的field	
hvals key	                        获取所有的value	
hsetnx key field value	            设置field值,field不存在时成功	
hincrby key field n	                对应field-value+n	
hincrbyfloat key field n	        对应field-value+n(浮点数版)	
hstrlen key field	                计算value的字符串长度	

注意: List数据结构左右都可以插入数据、获取数据

4、Set类型

使用场景: 文章点赞、共同关注等

基本指令:

sadd key element [element … ]set添加一个获多个元素	
smembers key	                        获取集合的所有元素	
sismember key element	                判断一个元素是否在set中
scard key	                            求集合中元素个数	
spop key [count]	                    随机删除并获取元素	
srandmember key [count]	                随机获取元素	
smove sourse destination member	        将元素从一个集合中移到另一个集合	
srem key member [member …]	            移除指定元素	
sinter key1 [key2 … ]	                求交集	
sinterstore destination key1 [key2 …]	求交集并放入指定集合中	
sunion key1 [key2 … ]	                求并集
sunionstore destination key1 [key2 …]	求并集并放入指定集合中	
sdiff  key1 [key2 … ]	                求差集	
sdffstore destination key1 [key2 …]	    求差集并放入指定集合中	

5、ZSet类型

使用场景: 排行榜、电话、姓名排序等

基本指令:

zadd 集合名   scroe值 value        向集合中增加value值,排序的时候通过score的值进行排序
zrange 集合名 0 -1                 查询集合中所有的值,默认按照score值的升序排列
zrangebyscore 集合名  -inf +inf    按score值升序排列,可以用具体值替换+-inf,例如[-inf,2000]
zrevrangebyscore 集合名 +inf -inf  按照score的值降序排列
zrem  集合名 value                 移除该集合中的指定元素        
zcard  集合名                      获取有序集合中的元素的个数
3.2.2、3种特殊数据类型
1、geospatial类型

使用场景: 朋友定位、附近的人、打车距离、两点之间的距离、以某一个点为中心,距离中心多少的人或者事物等

基本指令:

geoadd  key  经度1 纬度1  城市1             在key中存储城市的位置信息
如:geoadd china:city 116.40 39.90 beijin 
geopos  key  城市1                         取出key中指定城市的的经度和纬度
geodist  key 城市1  城市2  m/km            计算两个城市之间的距离,单位为m/km
georadius key 经度 纬度 500km              key下所有距离该位置半径为500km的范围内的城市
georadiusbymember key  城市1 1000km       找出key下距离城市1000km范围内的城市
2、hyperloglog类型

HyperLogLog是一种概率数据结构,用于基数估计,即估计一个集合中不同元素的数量。它非常适合用来统计独立元素的数量,比如在网页访问量统计、独立用户计数等场景中。HyperLogLog的优势在于其内存效率极高,即使在数据量极大的情况下,也能保持极低的内存(占用内存固定:12kb)占用,且错误率控制在0.81%
所谓的 基数: 集合中不重复的元素的个数 。

使用场景: 网站的访问量、广告点击率分析、游戏玩家分析、社交媒体分析等

基本指令:

[PFADD key element [element ...]              添加指定元素到 HyperLogLog 中。
[PFCOUNT key [key ...]                        返回给定 HyperLogLog 的基数估算值。
[PFMERGE destkey sourcekey [sourcekey ...]    将多个 HyperLogLog 合并为一个 HyperLogLog,并集计算
3、bitmaps类型

位图(Bitmaps)是一种非常有用的数据结构,它允许存储大量的二进制数据(即只有0和1的位)。Redis的位图操作非常高效,特别是在处理大量布尔值或者计数问题时非常有用。

使用场景: 用户活跃性跟踪、统计独立访客、用户登录状态记录、计数器(例如访问次数)等

基本指令:

zadd 集合名   scroe值 value        向集合中增加value值,排序的时候通过score的值进行排序
zrange 集合名 0 -1                 查询集合中所有的值,默认按照score值的升序排列
zrangebyscore 集合名  -inf +inf    按score值升序排列,可以用具体值替换+-inf,例如[-inf,2000]
zrevrangebyscore 集合名 +inf -inf  按照score的值降序排列
zrem  集合名 value                 移除该集合中的指定元素        
zcard  集合名                      获取有序集合中的元素的个数

本篇完结(下一篇,Redis高频面试问题总结,有需要的朋友可以关注我,后续持续分享Java更多白话文讲解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值