Redis缓存应用基础

Redis缓存应用基础

1、Redis简介

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多:String(字符串)、List(链表)、Set(集合)、ZSet(有序集合)和Hash(哈希类型)。与Memcached一样,为了保证效率,数据都是缓存在内存中。较大区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。目前相对较优秀的NoSQL数据库。单线程支持10w+QPS。

2、Redis安装 (Mac OSX)

  1. 官网 https://redis.io 下载最新版本,目前是Redis 5.0.3;

2)本地文件解压到目录:/usr/local/redis-5.0.3

3)编译源程序,进入redis目录

make

4)启动redis服务,进入Redis/bin目录

./redis-server ../redis.conf

➜  bin ./redis-server ../redis.conf
30578:C 18 Mar 2019 17:43:18.825 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
30578:C 18 Mar 2019 17:43:18.825 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=30578, just started
30578:C 18 Mar 2019 17:43:18.825 # Configuration loaded
30578:M 18 Mar 2019 17:43:18.826 * Increased maximum number of open files to 10032 (it was originally set to 256).
              _._                                                  
         _.-``__ ''-._                                             
    _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
.-`` .-```.  ```\/    _.,_ ''-._                                   
(    '      ,       .-`  | `,    )     Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
|    `-._   `._    /     _.-'    |     PID: 30578
`-._    `-._  `-./  _.-'    _.-'                                   
|`-._`-._    `-.__.-'    _.-'_.-'|                                  
|    `-._`-._        _.-'_.-'    |           http://redis.io        
`-._    `-._`-.__.-'_.-'    _.-'                                   
|`-._`-._    `-.__.-'    _.-'_.-'|                                  
|    `-._`-._        _.-'_.-'    |                                  
`-._    `-._`-.__.-'_.-'    _.-'                                   
    `-._    `-.__.-'    _.-'                                       
        `-._        _.-'                                           
            `-.__.-'                                               

30578:M 18 Mar 2019 17:43:18.827 # Server initialized
30578:M 18 Mar 2019 17:43:18.828 * DB loaded from disk: 0.000 seconds
30578:M 18 Mar 2019 17:43:18.828 * Ready to accept connections

5)通过redis-cli连接使用

./redis-cli

-rwxrwxrwx   1 root     staff   247K  2 13 16:48 redis-cli
-rwxrwxrwx   1 root     staff   1.3M  2 13 16:48 redis-server
➜  bin ./redis-cli
127.0.0.1:6379> keys *

6)Redis的配置文件

 ```
 daemonize:如需要在后台运行,把该项的值改为yes
 pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
 bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
 port:监听端口,默认为6379
 timeout:设置客户端连接时的超时时间,单位为秒
 loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
 logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
 database:设置数据库的个数,默认使用的数据库是0
 save:设置redis进行数据库镜像的频率
 rdbcompression:在进行镜像备份时,是否进行压缩
 dbfilename:镜像备份文件的文件名
 dir:数据库镜像备份的文件放置的路径
 slaveof:设置该数据库为其他数据库的从数据库
 masterauth:当主数据库连接需要密码验证时,在这里设定
 requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
 maxclients:限制同时连接的客户端数量
 maxmemory:设置redis能够使用的最大内存
 appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
 appendfsync:设置appendonly.aof文件进行同步的频率
 vm_enabled:是否开启虚拟内存支持
 vm_swap_file:设置虚拟内存的交换文件的路径
 vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
 vm_page_size:设置虚拟内存页的大小
 vm_pages:设置交换文件的总的page数量
 vm_max_thrrads:设置vm IO同时使用的线程数量
 
 ```

3、基本命令应用

1)String 字符串

127.0.0.1:6379> SET name Brace
OK
127.0.0.1:6379> get name
"Brace"
127.0.0.1:6379> setnx name Good
(integer) 0
127.0.0.1:6379> 

重点说明 SETNX

只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
若键 key 已经存在, 则 SETNX 命令不做任何动作。
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
返回值
命令在设置成功时返回 1 , 设置失败时返回 0 。

SETEX:常用的SETEX ,当我们设置key的值时,同时会设置其过期时间。
将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。
如果键 key 已经存在, 那么 SETEX 命令将覆盖已有的值。
SETEX 命令的效果和以下两个命令的效果类似:

SET key value
EXPIRE key seconds # 设置生存时间
SETEX 和这两个命令的不同之处在于 SETEX 是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置过期时间这两个操作, 因此 SETEX 命令在储存缓存的时候非常实用。
返回值
命令在设置成功时返回 OK 。 当 seconds 参数不合法时, 命令将返回一个错误

2)HASH 哈希表

```
127.0.0.1:6379> hset hName nickname "zhangsan"
(integer) 1
127.0.0.1:6379> hget hName nickname
"zhangsan"
127.0.0.1:6379> hexists hName nickname
(integer) 1
127.0.0.1:6379> hexists hName uid
(integer) 0
127.0.0.1:6379> hlen hName
(integer) 1
127.0.0.1:6379> hincrby hName uid 3
(integer) 3
127.0.0.1:6379> hget hName uid
"3"
127.0.0.1:6379> hset hName age 20
(integer) 1
127.0.0.1:6379> hmset hName nickname "lisi" age 12
OK
127.0.0.1:6379> hmget hName nickname uid age
1) "lisi"
2) "3"
3) "12"
127.0.0.1:6379> hkeys hName
1) "nickname"
2) "uid"
3) "age"
127.0.0.1:6379> hvals hName
1) "lisi"
2) "3"
3) "12"
127.0.0.1:6379> hgetall hName
1) "nickname"
2) "lisi"
3) "uid"
4) "3"
5) "age"
6) "12"
127.0.0.1:6379> 

```
  1. LIST 列表

BRPOP 是列表的阻塞式(blocking)弹出原语。
它是 RPOP key 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP 命令阻塞,直到等待超时或发现可弹出元素为止。

当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素。
关于阻塞操作的更多信息,请查看 BLPOP key [key …] timeout 命令, BRPOP 除了弹出元素的位置和 BLPOP key [key …] timeout 不同之外,其他表现一致。

返回值
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。


127.0.0.1:6379> LPUSH list 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPUSH list 6
(integer) 6
127.0.0.1:6379> lrange list 0 6
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lpop list
"6"
127.0.0.1:6379> rpop list
"1"
127.0.0.1:6379> rpoplpush list list2
"2"
127.0.0.1:6379> lrange list2  0 5
1) "2"
127.0.0.1:6379> lrange list 0 5
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> lrem list 2 4
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "3"
127.0.0.1:6379> lpush list 5
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "5"
3) "3"
127.0.0.1:6379> lrem list 2 5
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "3"
127.0.0.1:6379> brpop list 30
1) "list"
2) "3"
127.0.0.1:6379> brpop list 30 list2 20
1) "list2"
2) "2"
127.0.0.1:6379> 


  1. SET 集合 (ZSET)
127.0.0.1:6379> sadd set "goods"
(integer) 1
127.0.0.1:6379> sadd set "this" "is"
(integer) 2
127.0.0.1:6379> smembers set
1) "is"
2) "this"
3) "goods"
127.0.0.1:6379> spop set is
(error) ERR value is not an integer or out of range
127.0.0.1:6379> spop set 1
1) "goods"
127.0.0.1:6379> smembers set
1) "is"
2) "this"
127.0.0.1:6379> SRANDMEMBER set 2
1) "is"
2) "this"
127.0.0.1:6379> SRANDMEMBER set 1
1) "is"
127.0.0.1:6379> SRANDMEMBER set 1
1) "is"
127.0.0.1:6379> SRANDMEMBER set 1
1) "this"
127.0.0.1:6379> srem set this
(integer) 1
127.0.0.1:6379> smembers set
1) "is"

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容

  • Redis从入门到精通:中级篇 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二...
    叨唧唧的阅读 685评论 0 0
  • Ubuntu下安装redis 安装redis 在 Ubuntu 系统安装 Redi 可以使用以下命令: 启动 Re...
    riverstation阅读 935评论 0 0
  • NoSQL介绍 一类新出现的数据库(not only sql),它的特点: 不支持SQL语法 存储结构跟传统关系型...
    瘦不下去了阅读 279评论 0 0
  • 重点参考链接: http://www.cnblogs.com/wangyuyu/p/3786236.html Re...
    Kevin_Junbaozi阅读 2,181评论 0 21
  • 做一个大方的人: 001 谁都不喜欢抠门的人。 002 如果你持续大方,大家就会认定你是一个不会让他人吃亏的人,会...
    5239林中漫步阅读 202评论 0 4