Redis从基础到精通(一)-推荐看看这篇!_wenjin文瑾 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

Redis从基础到精通(一)-推荐看看这篇!_wenjin文瑾

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:45

Redis大年夜基本到精晓

一 . Linux下安装Redis

  1. 下载安装包 redis官网:https://redis.io/,下载完成 redis-4.0.9.tar.gz
    在这里插入图片描述
  2. 启动Linux,上传安装包至/home/wenjin目次下
    在这里插入图片描述
  3. 移动安装包至opt目次下 mv redis-4.0.9.tar.gz /opt
  4. 解压 tar -zxvf redis-4.0.9.tar.gz
  5. 进入解压后的文件,可以看到redis的设备文件
    在这里插入图片描述
  6. 安装gcc情况 yum install gcc-c++ 履行make敕令 make install敕令
  7. redis默认安装在 /usr/local/bin
    在这里插入图片描述
  8. 将redis设备文件复制至当前文件夹下 cp /opt/redis-4.0.9/redis.conf wconfig
    在这里插入图片描述
  9. redis默认不是后台启动的,修改设备文件 vim redis.conf 修改daemonize no 为 daemonize yes
    在这里插入图片描述
  10. 启动redis办事,在bin目次下履行 redis-server wconfig/redis.conf
    在这里插入图片描述
  11. 应用redis自带客户端连接测试 redis-cli -p 6379
    在这里插入图片描述

二 . Redis基本常识

redis有16个数据库,默认为第0个数据库
切换数据库 select 序号
在这里插入图片描述
查看所有的key

127.0.0.1:6379[3]> keys *
1) "age"
127.0.0.1:6379[3]>
清除当前数据库 FLUSHDB
清除所稀有据库 FLUSHALL
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

Redis是单线程的!!
官方表示Redis是基于内存操作的,CPU不是Redis的机能瓶颈,Redis的机能瓶颈是根据计算机的内存和收集带宽,既然可以应用单线程来实现就应用单线程实现了!
Redis是C说话写的,官方供给的数据为100000+QPS,机能异常之高!

Redis为什么单线程还这么快?
1. 误区1:高机能的办事器必定是多线程的?
2. 误区2:多线程(CPU高低文切换!)必定比单线程高!
核心:Redis是将所有的数据放在内存中,所以说Redis应用单线程去操作效力就是最高的,(多线程CPU高低文切换耗时光!!),对于内存体系来说,没有高低文切换效力就是最高的!多次读写都是在一个CPU 上,在内存情况下这个就是最佳筹划!

三 . Redis五大年夜数据类型

在这里插入图片描述

萌芽未知敕令----Redis中文网站 http://www.redis.cn/commands.html# Redis-key

127.0.0.1:6379> keys *    //查看当前库所有的key 
(empty list or set)
127.0.0.1:6379> flushall   //清除所有的库
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name wenjin   
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name  //查看key是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1   //一出key到目标库
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> select 1  //切换库
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name wenwen
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> expire name 10  //设置key过不时光,单位是秒
(integer) 1
127.0.0.1:6379> ttl name  //查看当前key的残剩时光
(integer) 6
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> type age  //查看key的类型
string
127.0.0.1:6379>

String类型

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name1 wenjin
OK
127.0.0.1:6379> get name1
"wenjin"
127.0.0.1:6379> append name1 ",qianyu"  //追加字符串
(integer) 17
127.0.0.1:6379> get name1
"wenjin,qianyu"
127.0.0.1:6379> append name2 "hello"  //追加字符串,如不雅当缁ぶ符串不存在,则为set
(integer) 5
127.0.0.1:6379> strlen name2   //查看字符串长度!
(integer) 5
127.0.0.1:6379>

做自增i++,例如浏览量

127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incr view   //自加
(integer) 1
127.0.0.1:6379> incr view
(integer) 2
127.0.0.1:6379>
127.0.0.1:6379> incr view
(integer) 3
127.0.0.1:6379> decr view  //自减
(integer) 2
127.0.0.1:6379> decr view
(integer) 1
127.0.0.1:6379> decr view
(integer) 0
127.0.0.1:6379> decr view
(integer) -1
127.0.0.1:6379> incrby view 30   //自加多
(integer) 29
127.0.0.1:6379> decrby view 20   //自减多
(integer) 9
127.0.0.1:6379>

字符串调换和朝长进步

//字符串范围 range
127.0.0.1:6379> set key1 "hello,wenjin"
OK
127.0.0.1:6379> get key1
"hello,wenjin"
127.0.0.1:6379> getrange key1 0 4     //朝长进步字符串【0,3】
"hello"
127.0.0.1:6379> get key1
"hello,wenjin"
127.0.0.1:6379> getrange key1 0 -1    //获取全部字符串
"hello,wenjin"
127.0.0.1:6379> set key2 abdfdgdjkj
OK
127.0.0.1:6379> get key2
"abdfdgdjkj"
127.0.0.1:6379> setrange key2 2 xxx   //字符串调换
(integer) 10
127.0.0.1:6379> get key2
"abxxxgdjkj"

重点:setex和setnx基本用法及分布式锁应用处景

#setex (set with expire)      //设置过不时光    
#setnx (set if not existr)    //设置不存在的key-value (在分布式锁中常用)
127.0.0.1:6379> setex key3 40 danaomeng    //设置key3的值袈溱40秒后过时
OK
127.0.0.1:6379> ttl key3     //查看key3的过不时光
(integer) 35
127.0.0.1:6379> ttl key3
(integer) 32
127.0.0.1:6379> setnx mykey hahhahaha    //如不雅meykey不存在,则设置mykey
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
4) "i"
5) "name"
127.0.0.1:6379> setnx mykey wewewewe   //如不雅mykey存在,则设置掉败
(integer) 0
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
4) "i"
5) "name"
127.0.0.1:6379> get mykey
"hahhahaha"

批量设置字符串

#mset   #mget
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3   //同时设置多个值
OK
127.0.0.1:6379> mget k1 k2 k3     //同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> msetnx k1 v1 k4 v4    //msetnx是一个原子性操作,要么一路成功!要么一路掉败!
(integer) 0
127.0.0.1:6379>

设置对象
#对象

set user:1 {name:wenjin,age:22}   #这只一个user:1对象,值用一个json字符串来保存一个对象!
#这里key是一个奇妙的设计: user:{id}:{filed}
127.0.0.1:6379> mset user:1:name liusan user:1:age 33
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "liusan"
2) "33"
127.0.0.1:6379>

getset用法

#getset   //先get后set   
127.0.0.1:6379> getset desc redis    //如不雅不存在值袈潋,则返回nil
(nil)
127.0.0.1:6379> get desc
"redis"
127.0.0.1:6379> getset desc mongodb   //如不雅存在值,则返回本来的值,设置新的值!
"redis"
127.0.0.1:6379> get desc
"mongodb"
127.0.0.1:6379>

String类型应用处景:value除了我们的字符串还可所以数字
* 计数器
* 统计多单位数量
* 粉丝数
* 对象缓存存储
* 等等等等
**

基本部分先写到这里,后期内容我会进一步跟进,迎接各位小伙伴一路商量!

**

相关案例查看更多