Redis学习笔记【三】

Redis设置密码

  1. 配置文件设置密码(redis.conf):在配置文件中将requirepass取消注释,后面设置自己的密码(重启redis=>shutdown=>redis-server /etc/redis.conf)
  2. 命令行设置密码(无需重启redis)

进入redis,config set requirepass ***(密码)

config get requirepass(查看密码)

使用方法二设置的密码是临时的,重启后会恢复默认值,需要命令行设置新密码后使用config rewrite将修改持久化到redis.conf配置文件

设置密码之后登入redis要附带密码,或者先登录后验证密码,具体操作如下:

  1. redis-cli -a *****(密码)
  2. 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值