Redis基本理论知识
2021-05-17 13:32:16 11 举报
AI智能生成
redis
作者其他创作
大纲/内容
概念
远程字典服务,也叫结构化数据库,可用于高速缓存,计数器/计时器,数据库,消息中间件MQ等,底层使用c开发
基本知识
默认有16个数据库,默认使用0
简单命令
keys *
查看所有key
exists test
确认一个key 是否存在
dbsize
返回当前数据库中key 的数目
flushdb
删除当前选择数据库中的所有key
flushall
删除所有数据库中的所有key
move key
移除key
set/get
设置/获取值
......
redis是单线程的,基于内存操作,效率比多线程高
默认端口6379
Nosql概述
not only sql
泛指非关系型数据库
RDBMS(关系型数据库)
特点
方便扩展(数据之间没有关系,方便扩展)
大数据量,高性能(写8w/s,读11w/s)
数据类型多样(不需要设计数据库)
分类
KV键值对
Redis
文档型数据库
MongoDb
分布式存储型数据库
非关系型数据库中最像关系型数据库的
ConthDB
列存储数据库
HBase(大数据相关)
分布式文件系统
图关系数据库
Neo4j
InfoGird
基本数据结构
http://www.redis.cn/commands.html 可在官方网站查询命令
string(字符串)
append(追加字符串)
strlen(字符串长度)
incr 1(自增1),incrby(设置自增值)
相当于i++
计数器
decr 1(自减1),decrby(设置自减值)
相当于i--
getrange key 0 5(截取字符串0到5)
相当于substring
setrange key 0 5(替换字符串0到5)
相当于replace
setex key 30 'hello'(set with expire 设置过期时间)
setnx key 'hello' (set if not exist 如果不存在就创建key,存在就创建失败)
常用于分布式锁
mset k1 v1 k2 v2 k3 v3(批量设置值)
mget k1 k2 k3(批量获取值)
msetnx k1 v1 k2 v2 k3 v3(如果不存在就批量设置值)
getset key value(获取并创建)
list(列表)
lpush list k1 lpush list k2 lpush list k3 (设置值)/Rpush list k1 lpush list k2 lpush list k3 (设置值)
lrange list 0 -1 (显示所有,数据结构为list)
lrange list 0 1(显示list的k1 k2)
相当于list(0) 和 list(1)
ipop list (移除元素)
llenth list (获取长度)
lrem list 1 k1(移除指定个数的值)
ltrim list 1 2 (通过下标截取指定的长度)
rpoplpush list newlist (移除列表的最后一个元素到新列表)
set(无序集合)
sadd v1 'hello'(添加元素)
smembers v1(查看值)
sismember v1 helle (判断值是否在set中)
相当于contains
scard v1(查看ser里元素的个数)
srem v1 hello(移除元素)
randmember v1 (随机取出一个元素)
spop v1(随机移除一个元素)
smove v1 v2 "hello" (移除指定元素到一个新set)
sdiff v1 v2 (查看差集)
sinter v1 v2 (查看交集)
suniom v1 v2 (查看并集)
hash(哈希)
hset myhash fied1 hello
hdel myhash fied1 hello(删除set的指定值)
hlen myhash (大小)
hexist myhash filed1 (判断是否存在)
hkeys myhash (获取所有的字段)
与String差不多,只不过value是key + value 形式
zset(有序集合)
sadd v1 1 'hello'(在指定位置添加一个元素)
sadd v1 2 'hello2' 3 'hello3'(在指定位置添加多个元素)
和set差不多,只不过多了计数位
......
特殊数据结构
Geospatital(地理位置)
底层使用原理就是zset
zrange china:city 0 -1(查看所有城市)
zrem china:city beijing(移除指定城市)
geoadd china:city 112 110 beijing (添加城市经纬度)
geopos city beijing(获取指定城市的经纬度)
geodist china:city beijing shanghai km(查看北京到上海的直线距离)
georadius china:city 110 30 1000km(以110 30经纬度为中心 查找周围1000km的城市)
georadiusbymember china:city beijing filed 1000 km(以北京为中心查找附近1000km的城市)
Hyperloglog(基数统计)
概念:不重复的元素统计,有0.8%误差。应用:网站的uv统计
pfadd mykey1 a b c d e f 添加元素1
pfadd mykey1 g h i g a b z 添加元素2
pfmerger mykey3 mykey1 mykey2 (把key1,2 并集到3里)
pfcount mykey3(统计基数数量)
Bitmaps(位图场景)
概念:通过操作二进制位记录数据,非0即1
举例:周一到周日的打卡情况↓
setbit sign 0 0
周一未打卡
setbit sign 1 1
周二已打卡
getbit sign 1
查看周二是否打卡
bitcount sign
统计打卡记录
事务操作
事务特性(ACID)
原子性(不支持)
要么同时成功,要么同时失败
持久性
当一个事务执行完毕,执行这个事务所得到的结果被保存在持久化的存储中,即使服务器在事务执行完成后停机了,执行的事务的结果也不会被丢失
隔离性(单线程没有隔离性的概念)
数据库中有多个事务并发的执行,各个事务之间不会相互影响,并且在并发状态下执行的事务和串行执行的事务产生的结果是完全相同的
一致性
如果数据库在执行事务之前是一致的,那么在事务执行之后,无论事务是否成功,数据库也应该是一致的
注意:redis单条命令保证原子性,但是redis事务是不保持原子性的,也就是说事务中有一个命令错误,是不影响其它语句执行的
实际操作
multi
开启事务
入队
set k1 v1
set k2 v3
get k2
set k3 v3
exec
执行事务
discard
取消事务
监控
乐观锁
概念:无论做什么都加锁,影响性能
悲观锁
概念:认为什么时候都不会出现问题,所以不会加锁,更新数据判断在此期间是否有人修改数据 version
命令
watch v1
监视v1元素
相当于乐观锁
多个进程操作元素v1 就会导致事务执行失败
unwatch(放弃监视)
Jedis
概念:是官方推荐的java开发工具,是一个操作redis的中间件
可直接操作上边的命令
Springboot整合
0 条评论
下一页