redis

本文详细介绍了Redis的基础知识,包括NoSQL的发展历程、Redis的基本概念、5大基本数据类型及其特殊数据类型的使用,以及Redis的事务、持久化、主从复制等关键特性。还探讨了Redis在大数据时代的角色,以及如何在SpringBoot中整合Redis。最后,文章提到了Redis缓存的穿透、击穿和雪崩问题及其解决方案。
摘要由CSDN通过智能技术生成

redis

一、基础知识

1、nosql

(1)发展历程

单机mysql->Memcached(缓存)+Mysql+垂直拆分(读写分离)->分库分表+水平拆分+mysql集群 ->Nosql

(2)定义

nosql=not only sql(不仅仅是sql)

(3)特点

1.方便扩展(数据之间没有关系,很好扩展)

2.大数据量高性能(Redis一秒写8万次,读11万次)

3.数据类型是多样性的(不需要预先设计数据库,随取随用)

(4)传统RDBS(关系型数据库)与nosql区别

传统RDBS:

1)结构化组织

2)数据库关系都存在单独的表中

3)用数据库定义的语言操作

4)严格的一致性

Nosql

1)不仅仅是数据,没有固定的查询语句

2)键值对存储、列存储、文档存储、图形数据库

3)最终一致性

4)CAP定理和BASE(异地多活)

5)高性能、高可用、高可扩

(5)Nosql四大分类

kv键值对----> redis

文档型数据库-----> MongoDB

​ ------> conthDB

列存储数据库-------> Hbase

图关系数据库--------->Neo4j

​ --------->infogrid

2、大数据时代的3V 3高

(1)3v

海量、多量、实时

(2)3高

高并发、高可拓、高性能

3、redis基本概念

remote directionary server 远程字典服务

特性:

1、多样的数据类型

2、持久化

3、集群

4、事务

二、redis学习

1、redis-benchmark

707331-20180201145503750-901697180

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

s

2、redis基础命令

说明

1)redis命令不区分大小写

2)redis有16个数据库,默认使用第0个,可以使用select选取。

(1)select

选取数据库,从0开始,默认是0

select 0
select 1

(2)flush

清除当前数据库

flushdb

清楚所有数据库

flushall

(3)dbsize

查看当前数据库大小

dbsize

(4)keys *

查看所有key

keys *

(5)exists

判断key是否存在,如果存在返回1,不存在返回0

exists key

(6)move

从当前数据库把key移到‘1’数据库

move key 1

(7)del

del key

(8)expire

key还能存活10s

expire key 10

查看key还剩几秒存活时间

ttl key

(9)type

看key的类型

type key

(10)shutdown

关闭redis

shutdown

3、redis5大基本数据类型

(1)string类型

(a)set get方法
set key "abc"
get key
//先获取key的value,在把value设置成设定值(如果key不存在,就创建一个,并赋值为设定值)
getset key "abc"
//设置过期时间 (设置key的value为hello,并设置存活时间为30s)
setex key 30 "hello"
//如果key存在,则报错。如果key不存在,创建key并赋值为hello
setnx key "hello"

批量设定/获取

mset key1 value1 key2 value2
mget key1 key2

在key对应的value后面拼接字符串

append key "abc"
//有一个已经存在,则都存不进去,符合原子性操作,都不存在才能存入,一个存在就都不存入
msetnx k1 v1 k4 v4

设置对象

//设置一个user:1的对象,格式为json字符串.
set user:1 {name:gzx,age:5} 
//如果user:1已经存在,则会更新key的value
//如果user:1不存在,则会创建user:1:name 和user:1:age 两个key
mset user:1:name gzx user:1:age 2
//以上两种方法都能用下面mget获取
mget user:1:name user:1:age
(b) append
//在key对应的value后面拼接hello
append key "hello"
(c) strlen
//获取key对应value的长度
strlen key
(d) incr和decr
//自增1
incr key 
//自减1
decr key
//增加指定长度
incrby key 步长
incrby key 10  加10
incrby key -10  减10
decrby key 10 减少指定长度
(e) 截取
range key 0 3 截取字符串0-3(闭区间)
range key 0 -1 截取全部
(f) 替换
//把key对应的value,从指定索引(1)开始替换为xx
setrange key 1 xx

(2)list类型

(a)push
//在list集合最前面插入指定值
lpush list abc
//在list最后面插入指定值
rpush list abc
(b)range
//获取指定范围内的list元素
lrange list 0 3
lrange list 0 -1
(c)pop
//删除list第一个元素
lpop list
//删除list最后一个元素
rpop list
//删除list的最后一个元素,把它移动到list2的最前面
rpoplpush list list2
(d)index
//根据索引获取list中元素
lindex list 1
(e)len
//查看list长度
llen list
(f)rem
//删除1个list中值为one的元素
lrem list 1 one
//删除两个list值为two的元素
lrem list 2 two
(g)trim
//修剪mylist索引1-2的元素
ltrim mylist 1 2
(h)set
lpush list value1
//必须先创建list,才能set,否则报错
//更新索引为0的元素为value1
lset list 0 value1
(i)insert
//在list集合中value为one的元素前面插入abc
linsert list before "one" "abc"
//在list集合中value为one的元素后面插入abc
linsert list after "one" "abc"

(3)set类型

(a)增/删/查/移
//增
sadd set one
//删--rem 删除值为one的set元素
srem set "one"

//删-pop 随机删除一个set元素
spop set
//查--set长度
scard set

//查--查询set所有元素
smembers set

//随机获取 随机获取指定个数的set元素
srammember set 2
//移--将指定元素从一个set移动到另一个set
smove sourceset destinationset "abc"
(b)交集/并集/差集
//差集
sdiff set1 set2
//交集
sinter set1 set2
//并集
sunion set1 set2

(4)zset类型(有序集合)

(a)增/删/查
//新增,数字按照自己习惯来,不一定要从0开始,也不一定必须是连续的
zadd zset 1 one
zadd zset 2 two
zadd zset 5 three
//删 移除value为one的set元素
zrem zset one
//查
zrange zset 0 -1
//查-长度
zcard zset
//查-区间中集合元素数量(获得序号是1-3的元素数量)
zcount zset 1 3
(b)排序
//排序
//升序
zrangebyscore zset -inf +inf
//升序,且带编号,在负无穷到2500
zrangebyscore zset -inf +inf withscores
//升序,且带编号,在负无穷到2500
zrangebyscore zset -inf 2500f withscores
zrevrangebyscore zset 0 -1 //降序

(5)hash类型

(a)增/删/查
//增
hset hash key1 value1

//批量增加
hmest hash key1 value1 key2 value2

//不存在,就添加,存在报错,要是key1存在,则失败
hsetnx hash key1 value1
//查
hget hash key1

//批量获取
hmget hash key1 key2

//获取全部(把key和value都查出来)
//结果类型如下
/**
1)key1
2)value1
3)key2
4)value2
**/
hgetall hash

//获取所有key
hkeys hash

//获取所有value
hvals  hash

//获取hash长度
hlen hash 
//删
//删除指定key字段
hdel hash key1
(b)exists
hexisits hash key1 //key1存在返回1,不存在返回0
(c)自增/自减
//自增
hincrby hash key1 1
//自减
hincrby hash key1 -1
hdecrby hash key1 1

3、redis特殊数据类型

(1)geospatial

(a)geoadd
geoadd china:city 116.40(经度) 39.90(纬度) beijing
//批量添加
geoadd china:city 116.40 39.90 beijing 114.05 22.50 shenzhen
(b)geodist
//计算两点之间距离
geodist china:city beijing shanghai
(c)geohash

返回一个或多个位置元素的geohash表示(了解)

geohash china:city beijing chongqing

结果:

1)wx45+xxfkeo 
2)wm5x2rgbtgo

两个结果过越相似,说明两个地点距离越近

(d)geopos
//获取经纬度
geopos china:city beijing
(e)georadius
//以某一个经纬度为中心,以某一个值为半径,进行搜索,找到圆内的所有点
georadius china:city 110.39(经度) 30.47(纬度) 1000(半径) km(单位)

单位:

m

km

mi 英里

ft 英尺

(f)georadiusbymember

根据某一名称的点为中心,某一设定值为半径,进行搜索,找到圆内的所有点

georadiusbymumber china:city beijing 1000 km
(g)补充(geospatial底层是zset)
//获取所有点
zrange china:city 0 -1
//删除指定点
zrem china:city beijing

(2)hyperloglog

基数统计,占用内存小,0.81%的容错率

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值