redis

本文深入探讨Redis的性能特点及其实现原理,包括单线程模型的优势、内存与网络带宽瓶颈分析。同时,全面解析Redis五大数据结构:String、List、Set、Hash和Sorted Set的操作与应用场景,如字符串范围操作、列表队列应用等。

redis测试性能

redis-benchmark [option] [option value]

基础知识

redis默认16个数据库,默认使用第0个

select --切换数据库

dbsize --查看数据库大小

keys * --查看所有的key

flushall --删除所有数据库数据

flushdb --删除当前数据库数据

redis是单线程的(6.0之前是)redis性能瓶颈不在cpu,而是机器内存和网络带宽,

redis将数据放在内存中,单线程完成,没有上下文切换,速度快

Redis-key

exists 【键值】 --判断是否存在键

expire 【键值】 【时间】 --设置过期时间 (单位是秒)

move 【键】【数据库名】 --移动数据到其他数据库

type 【键】 --查看键的类型

ttl

redis五大数据结构

String

set --设置key

get --获得值

append --追加字符串,不存在相当于set

strlen --查看字符串长度

incr --自增1

decr --自减1

incrby --按步长自增

decrby --按步长自减

#############################################33

#字符串范围range

getrange

127.0.0.1:6379> getrange s 0 3    --截取字符串[0,3]
"stri"
127.0.0.1:6379> getrange s 0 -1   --截取全部字符串
"string"

setrange

127.0.0.1:6379> setrange s 1 XX    --替换字符串指定位置
(integer) 6
127.0.0.1:6379> get s
"sXXing"

################################################

setex #如果存在则设置值->设置过期时间

setnx ##不存在设置(分布式锁常用)

127.0.0.1:6379> setex k1 20 ss
OK
127.0.0.1:6379> get k1
"ss"
127.0.0.1:6379> setnx k2 mongodb
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
2) "vq"
3) "s1"
4) "s"
5) "s2"
6) "s3"

##################################################

mset ##同时设置多个值

mget ##同时获取多个值

127.0.0.1:6379> mset v1 k1 v2 k2 v3 k3
OK
127.0.0.1:6379> mget v1 v2 v3
1) "k1"
2) "k2"
3) "k3"

msetnx ##msetnx是一个原子操作

#对象

set user:1{name:zhangsan,age:3} #设置redis对象值为json字符保存一个对象

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "3"

getset #先get后set,不存在值则返回null,存在值获取原来值并设置新值

List

在List里可以当成队列,栈,阻塞队列

lpush --将元素放到列表头部

lrange --通过区间获取具体值

127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"

rpush --将元素放到列表尾部

127.0.0.1:6379> rpush list one
(integer) 1
127.0.0.1:6379> rpush list two
(integer) 2
127.0.0.1:6379> rpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
3) "three"

lpop --移除队列第一个值

rpop --移除队列第最后一个值

index --通过下标获取队列值

llen --返回列表长度

lrem --移除指定值,精确匹配

事务

redis单条语句保证原子性,事务不保证原子性

redis事务没有隔离级别概念

redis事务中所有命令没有直接执行,保存在队列中,发起执行命令时才会执行 exec

具体步骤

开启事务 ->multi

命令入队

执行命令 ->exec

##discard --取消事务,事务队列中命令都不执行

运行时异常

事务队列其他指令正常执行,错误指令抛出异常

编译时异常

代码中所有命令都不能正常执行

乐观锁

watch命令监视值,当作redis乐观锁操作

unwatch放弃监视

springboot整合redis

jedis:采用直连,多线程操作不安全,使用jedis pool连接池,BIO

lettuce:采用netty,实例可以在多线程共享,线程安全,可以减少线程数量

事务队列其他指令正常执行,错误指令抛出异常

编译时异常

代码中所有命令都不能正常执行

乐观锁

watch命令监视值,当作redis乐观锁操作

unwatch放弃监视

springboot整合redis

jedis:采用直连,多线程操作不安全,使用jedis pool连接池,BIO

lettuce:采用netty,实例可以在多线程共享,线程安全,可以减少线程数量

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值