当前位置:网站首页>Redis学习笔记【三】
Redis学习笔记【三】
2022-08-11 05:31:00 【爱吃西瓜爱吃肉】
Redis设置密码
- 配置文件设置密码(redis.conf):在配置文件中将requirepass取消注释,后面设置自己的密码(重启redis=>shutdown=>redis-server /etc/redis.conf)
- 命令行设置密码(无需重启redis)
进入redis,config set requirepass ***(密码)
config get requirepass(查看密码)
使用方法二设置的密码是临时的,重启后会恢复默认值,需要命令行设置新密码后使用config rewrite将修改持久化到redis.conf配置文件
设置密码之后登入redis要附带密码,或者先登录后验证密码,具体操作如下:
- redis-cli -a *****(密码)
- redis-cli => auth ***(密码)
Redis三种特殊化数据类型
geospatial地理位置:可以推算地理位置信息,例如两地距离
---geoadd <key><经度><纬度><地名><经度2><纬度2><地名2>:添加地理位置
---geopos <key><地名>:获取该地的经纬度

---geodist <key><地名1><地名2>[KM|M]:获取两地的距离
---georadius<key><经度><纬度><距离>[withdist][withcoord]:按照指定经纬度的地点以距离范围为半径在key中查找附近的地点
[withdist]=>同时返回相差的距离
[withcoord]=>同时返回经纬度

---geordiusbymember<key><city><距离>:按照key中的成员以距离范围为半径找出附近的地点
---geohash<key><city1><city2>...:获得一个或多个位置元素的哈希值,将二维的及纬度转换为一维的字符串。哈希值越相似代表距离越近

Hyperloglog
基数统计的算法,优点快,内存固定
例如:网页的UV(一个人访问一个网站多次,但是还是算做一个人)
--pfadd<key><value><values2>....:添加一组key元素
--pfcount<key>:统计key的基数(基数:不重复元素的数量)
--pfmerge<newkey><key1><key2>:求key1、key2的并集放入newkey中

Bitmaps
按位存储操作二进制位进行记录,只有0和1两个状态,效率高,省内存
--setbit<key><offset><value>:例如添加周几的打卡情况
--getbit<key><offset>:例如获得周几的打卡情况
--bitcount<key>[start][end][bit|byte]:例如统计这周的打卡情况(统计1的个数)

Redis事务基本操作
事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程总,会按照顺序执行—— 一次性、顺序性、排他性
Redis单条命令是保证原子性的,但是事务不保证原子性,且没有隔离级别概念
开始事务multi->命令入队->执行事务exec

放弃事务:discard(事务中的命令全部取消)

事务中的异常:对于Mysql如果出现异常,整个事务内的命令全部不会执行(事务原子性:要么全部执行成功要么全部失败!)
对于Redis而言,类比Java异常:
编译性异常:命令有错,事务中全部命令不会被执行
运行时异常:存在语法错误(即不是错误命令),其他命令可以正常执行
情况一:如下=> hahah是错误命令属于第一种情况,直接报错不放入队列,事务中所有的命令都不执行

情况二:如下=> k1的值是String类型,不可以incr自增,但是本身命令正确,必须得运行之后判断是否为数字类型,不是才报错,所以会先将其放入队列中,运行完之后此案而过判断。其他的命令都会正常执行

Redis监控测试Watch
Redis悲观锁:
很悲观,认为什么时候都会出问题,无论做什么都会加锁
Redis乐观锁:
很乐观,认为什么时候都不会出现问题,所以不上锁,更新数据的时候才判断是否有人修改数据(mysql使用version)
【监控】例子如下:
进程一:watch监控money;原本money为80,开启事务,取钱10,事务不提交,先存入队列

进程二:在进程一事务未提交时同时充值钱1000

分析:在watch监控money期间发现有人变动了money的数据,此时进程一的事务会被服务器拒绝,并向客户端返回空

此时watch监视的money还是80---进行解锁获取money新值---unwatch----watch money
watch监控的实现原理
在每个redis数据库中都保存一个watched_keys字典(key是监视的数据库键,value是一个链表)来保存被监控的键,字典值是一个链表,链表中记录了所有监视相应键的客户端

【未监控】 举例说明如下
在刚才的例子后继续操作=>客户端一放置监控money,客户端二未监控,此时的watched_keys字典中,key即money,values只有客户端一
客户端二此时开启事务,设置钱为100,同时取出20,事务不提交

客户端一同时存钱1000,此时获得钱为1000

客户端二提交事务,执行成功,最终钱为80

边栏推荐
- 轻松理解进程与线程
- Unity Rebuild和Rebatch浅析
- 【LeetCode-389】找不同
- PyQt5中调用.ui转换的.py文件代码解释
- Day 83
- CLR via C# 第五章 基元类型、引用类型和值类型
- js learning advanced (event senior pink teacher teaching notes)
- swagger错误:WARN i.s.m.p.AbstractSerializableParameter - [getExample,421] - Illegal DefaultValue null
- C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
- Jetpack use exception problem collection
猜你喜欢
随机推荐
星盟-pwn-babyfmt
Gradle 相关知识总结
Asis2016 books null off by one
Lua 快速入门(六)——基础OOP
【无标题】
【LeetCode-69】x的平方根
gerrit configure SSH Key and account, email information
手把手导入企业项目(快速完成本地项目配置)
C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
Day 77
C# async/await异步操作实例
C# 基础之字典——Dictionary(二)
IndexError: index 9 is out of bounds for axis 0 with size 9;数组下标溢出问题
【LeetCode-205】同构字符串
一文看懂注解与反射
C语言-7月19日-指针的学习
【LeetCode-13】罗马数字转整数
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
【无标题】
JVM学习四:垃圾收集器与内存回收策略









