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,实例可以在多线程共享,线程安全,可以减少线程数量
本文深入探讨Redis的性能特点及其实现原理,包括单线程模型的优势、内存与网络带宽瓶颈分析。同时,全面解析Redis五大数据结构:String、List、Set、Hash和Sorted Set的操作与应用场景,如字符串范围操作、列表队列应用等。
173万+

被折叠的 条评论
为什么被折叠?



