redis初学
前言
其实今天已经临近机组考试了,现在复习计组应该是一个合理时期,但我学了下数据的表示与运算,也就是那些二进制的各种m运算,感觉还是早了。因为这种计算我之前是学过的,但现在忘了,也就是我只能短期内掌握,那么这还不够短期,明天在开始吧,三天复习应该是管够了。
那么开始下一步吧,大名鼎鼎的redis
牛马的git操作
按理说现在应该写redis的简介的,但是中途出现个小插曲,我想确认一下我创建分支以后的工作时间中,如何进行git的常规操作。
根据我目前的不够确认知识,我向ai提问:
在本地main分执行git pull是把远程仓库的最新改动同步过来到我的main分支对吗?
然后切换回本地我的负责的分支然后git merge main是把本地的mian再同过来对吗 ?
对的话为什么不能在我负责的分支直接从远程仓库拉去最新的代码?而是要分为两步走?
然后我add指令是添加修改到暂存区,然后commit是把暂存区的修改同步到我的负责分支对吗?
然后 push origin就是把我本地的负责分支推送到远程,但是还没有和main合并对吗?
然后合并的话就得向管理员发送pr对吗?
给的回答是完全正确,然后其实是不用分两步走的,但是分两步走是常规用法,有它自己的好处。
简介
Redis,英文全称是**Remote Dictionary Server**(远程字典服务),是一个开源的使用ANSI C语言(一种很老的c语言版本,性能很好)编写支持网络、可基于内存亦可持久化的日志型、Key-Value非关系型数据库,并提供多种语言的API。
如果你的网站访问很卡顿,那么接入redis缓存热点数据,将会使你的网站访问体验得到质的飞跃。
redis中的数据都是在内存里面的,redis服务重启之后,数据也会被清空的。
优点:
对数据高并发读写(直接是内存中进行读写的)
对海量数据的高效率存储和访问
对数据的可拓展性和高可用性.
每个操作都是原子操作(类似于单线程),没有并发相关问题(redis 6)
缺点:
redis(ACID处理非常简单)
无法做太复杂的关系数据库模型
不要用redis存储敏感数据。
数据结构类型
- string (字符串)
- list (列表)
- set (集合)
- hash (哈希)
- zset (有序集合)

不是啊,休息时间刷到湘ba真的很影响我学习,还好还有四十分钟开始,还有时间可以学点东西。
额,,中途去送了个东西,回来已经快开始了。zjq等人没来上课导致没拿到实验报告本,我去给她们送过去,其实我是没这个义务的,但我大概是确实没啥急事,就给她们送过去了,还淋了雨md。也算是帮她们个忙了,其实我帮她们忙不少,导致我每次找她们签到完全不会有愧疚感 。这也是个好事,因为我之前找人帮忙总是会有愧疚感,但只要我也帮过别人,就能削减这种感觉。同理,当我帮了别人很多时,我在接受别人的帮助时就能很大方的接收,目前的我觉得这样挺好的,既能够促进相互来往,也能够增加人脉力量。这一点lkj他们做的不好,一直让她们签到但是缺不能给她们提供帮助或者不会有能给她们提供帮助的可能,虽然签到确实是小事,但是在现代人们看到一个红点,去消除它,时间久了也会觉得厌烦的。
但人脉这个东西嘛,确实人脉就是金钱没错,但认识太多人也挺累的,也不是,是和太多人建立深度关系挺累的,总之,我感觉还是顺其自然吧。
字符串常用命令
| 命令格式 | 功能 | 案例 |
|---|---|---|
| set key value | 将key-value缓存redis中 | set name dafei |
| get key | 从redis中获取key对应value值 | get name |
| incr key | 将key对应value值 + 1 | incr age |
| decr key | 将key对应value值-1 | decr age |
| setex key seconds value | 将key-value缓存到redis中,seconds 秒后失效 | setex sex 10 man |
| ttl key | 查看key存活时间 | ttl sex |
| del key | 从redis中删除key | del name |
| setnx key value | 如果key已经存,不做任何操作,如果key不存,直接添加 | setnx name xiaofei |
哈希常用命令
哈希是这样存储的,值是键值对且可以是多个键值对,然后命令的前面都有个h前缀:
key: user
value: name hfs、age 18
| 命令格式 | 功能 | 案例 |
|---|---|---|
| hset key field value | 将field value对缓存到redis中hash中,键值为key | hset user name dafei |
| hget key field | 从key对应hash列表中获取field字段 | hget user name |
| hexists key field | 判断key对应的hash列表是否存在 field字段 | hexists user age |
| hdel key field | 删除key对应hash列表中field字段 | hdel user age |
| hincrby key field increment | 给key对应hash列表中field字段 + increment | hincrby user age 10 |
| hlen key | 查看key对应的hash列表field的数量 | hlen user |
| hkeys key | 获取key对应的hash列表所有的field值 | hkeys user |
| hvals key | 获取key对应的hash列表所有的field对应的value值 | kvals user |
| hgetall key | 获取key对应的hash列表中所有的field及其对应的value值 | hgetall user |
还有其它的如list、set、zset就不一一写了,都差不多。主要区分在于应用场景。根据不同的场景选择合适的数据类型。
key-value设计
对于value的设计,我们可以按应用场景取不同的数据类型,如遇到要排序的Sort Set,也可以用一种万能方法,也就是全部转为json字符串
对于key的设计,主要是命名,通用命名法为:

除了key的命名,还得设计它的时效性,也就是设计过期时间,否则永久key多了,会占用很多内存的。
。。我走神了,想起了今天中午在南门遇到她,大老远就看到她了,心里一紧,当时心里想的是如果她看了我的眼睛,我就点点头,结果是她没有看我,起码在我看她时没有看我,也有可能她真的没看到我。在公共场合或者有其它人的情况下,我不太想和她打招呼,或者说不想动作太大打招呼,她应该也是。
因为我不喜欢有人起哄或者说些什么,我想她也一定不喜欢。我想我们也许是达到这种默契了。但这种擦肩而过的感觉让我有点空落落的,因为我也不能确保她是不是真的和我达到了这种默契,也许她没把我当回事呢,这是最坏的情况,但可能性还是较小的。保持理智,我们应该是有这种默契的。
Redis全局命令
全局命令针对的是所有的key,大部分用来做运维,做管理的。
常用的全局key
| 命令格式 | 功能 | 案例 |
|---|---|---|
| keys pattern | 按照pattern 匹配规则,列表redis中所有的key | keys xxx:* |
| exists key | 判断key是否存在 | exists name |
| expire key seconds | 给key设置过期时间,超时:seconds | expire name 10 |
| persist key | 取消key过期时间 | persist name |
| select index | 切换数据库,默认是第0个,共有【0,15】个 | select 0 |
| move key db | 从当前数据库将key移动到指定db库 | move name 1 |
| randomkey | 随机返回一个key | randomkey |
| rename key newkey | 将key改名为newkey | rename name newname |
| echo message | 打印message信息 | echo message |
| dbsize | 查看key个数 | dbsize |
| info | 查看redis数据库信息 | info |
| config get * | 查看所有redis配置信息 | config get * |
| flushdb | 清空当前数据库 | flushdb |
| flushall | 清空所有数据库 | flushall |

