介绍:
Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件MQ,它支持多种类型的数据结构,如字符串( strings ) ,散列(hashes ) ,列表( lists ) ,集合(sets ) ,有序集合(sorted sets)与范围查询,bitmaps, hyperloglogs和地理空间( geospatial )索引半径查询. Redis内置了复制( replication ) , LUA脚本(Lua scripting ) , LRU驱动事件( LRU eviction ) ,事务(transactions )和不同级别的磁盘持久化( persistence ) ,并通过Redis哨兵(Sentinel )和自动分区( Cluster )提供高可用性(high availability ).
基础命令:
127.0.0.1:6379> ping #测试链接
PONG #连接成功
一、五大数据类型
1.String
介绍:
String 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。
常用命令:get、set、incr、decr、mget等。
使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。
实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
1.设置字符串、判断是否存在、追加字符串、字符串长度、截取、替换
127.0.0.1:6379> set key1 v1 #设置值
OK
127.0.0.1:6379> get key1 #获得值
"v1"
127.0.0.1:6379> keys * 获得所有的key
1) "key1"
127.0.0.1:6379> exists key1 #判断是否存在key1
(integer) 1
127.0.0.1:6379> append key1 hello #追加字符串,如果key不存在,就相当于setkey
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1 #获取字符串长度
(integer) 7
127.0.0.1:6379> getrange key1 0 3 #截取字符串
"v1he"
127.0.0.1:6379> getrange key1 0 -1 #查看字符串
"v1hello"
127.0.0.1:6379> setrange key1 1 xx #字符串替换
(integer) 7
127.0.0.1:6379> get key1
"vxxello"
2.设置过期时间setex、setnx
#setex (set with expire) #设置过期时间
#setnx (set if not exist) #不存在再设置(在分布式锁中会常常使用! )
127.0.0.1:6379> setex key3 30 "hel1o" #设置key3的值为hel1o, 30秒后过期
оK
127.0.0.1:6379> ttl key3
(integer) 26
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey "redis" #如果mykey不存在,创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
2) "mykey"
3) "keyl"
127.0.0.1:6379> tt1 key3
(integer) -2
127.0.0.1:6379> setnx mykey "MongoDB" #如果mykey存在,创建失败!
(integer) 0
127.0.0.1:6379> get mykey
"redis"
3.同时设置多个值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "K2"
3) "k3"
127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 #msetnx是一个原子性的操作,要么一起成功,要么一起失败!
(integer) 0
127.0.0.1:6379> get k4
(nil)
4.设置对象值
#对象
set user:1 {name:zhangsan, age:3} #设置一个user:1对象 值为json字符来保存一个对象!
#这里的key是一个巧妙的设计: user:[id} :{filed} ,如此设计在Redis中是完全0K了!
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
ОK
127.0.0.1:6379> mget user:1:name user:1: age
1) "zhangsan"
2)"2"
5.getset 组合命令
getset#先get然后再set
127.0.0.1:6379> getset key redis #如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get key
"redis"
127.0.0.1:6379> getset key mongodb #如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get key
"mongodb"
6.计数(阅读量)
127.0.0.1:6379> set