redist
Linux下安装
需要配置gcc环境
$ wget https://download.redis.io/releases/redis-6.2.4.tar.gz
$ tar xzf redis-6.2.4.tar.gz
$ cd redis-6.2.4
$ make
redis基本命令
redis-server 启动服务
redis-server myconfig/redis.conf //使用非默认配置文件启动
redis-cli
redis-cli -p 6379 //端口号
redis-benchmark 性能测试
redis-benchmark -h lcoalhost -p 6379 -c100 -n 1000
本地服务器 端口号6379 指定并发连接数100 指定请求数1000
基本命令
select 1 // 选择1号数据库 默认一共16个 编号0-15
dbsize //查看当前数据库大小
flushdb //清空数据库
keys * //查看当前数据库的key
set name tj //设置 name 值为 tj
get name //获取name的值
move [key] [数据库号] //移动key 到其他数据库,例如 move name 1 移动key到1号数据库
type [key] //查看key的数据类型
expire [key] 10 //key 10秒后到期
ttl [key] //查看key 的生存时间
redis类型
String类型
append // 在字符串结尾添加字符串
strlen // 查看key的长度
127.0.0.1:6379[1]> set views 0
OK
127.0.0.1:6379[1]> get views
“0”
127.0.0.1:6379[1]> INCr views #自增1
(integer) 1
127.0.0.1:6379[1]> INCr views
(integer) 2
127.0.0.1:6379[1]> INCr views
(integer) 3
127.0.0.1:6379[1]> INCRBY views 10 #可以设置步长,指定增量
(integer) 13
127.0.0.1:6379[1]> DECRBY views 10 #指定减量
(integer) 3
字符串范围
127.0.0.1:6379[1]> set key1 hello,world
OK
127.0.0.1:6379[1]> GETRANGE key1 0 3 #取字符串0-3
“hell”
127.0.0.1:6379[1]> GETRANGE key1 0 -1 #取全部字符串
“hello,world”
替换字符串
127.0.0.1:6379[1]> SETRANGE key1 2 xx #替换指定位置开始的字符串
(integer) 11
127.0.0.1:6379[1]> get key1
"hexxo,world"
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> setex key3 30 "hello" #设置key3的值,并且30秒之后过期
OK
127.0.0.1:6379[1]> ttl key3
(integer) 22
127.0.0.1:6379[1]> setnx mykey "redis" #如果mykey不存在,就创建mykey
(integer) 1
127.0.0.1:6379[1]> keys *
1) "key2"
2) "key1"
3) "mykey"
127.0.0.1:6379[1]> ttl key2
(integer) -1
127.0.0.1:6379[1]> ttl key3
(integer) -2
127.0.0.1:6379[1]> setnx mykey "xx" #设置失败
(integer) 0
127.0.0.1:6379[1]> get mykey
"redis"
127.0.0.1:6379[1]> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
127.0.0.1:6379[1]> keys *
1) "key1"
2) "k1"
3) "k3"
4) "key2"
5) "k2"
6) "mykey"
127.0.0.1:6379[1]> mget k1 k2 #同时获取多个值
1) "v1"
2) "v2"
127.0.0.1:6379[1]> msetnx k1 v1 k4 v4 #因为k1 存在所以 k4 的设置也失败
(integer) 0
127.0.0.1:6379[1]> keys *
1) "key1"
2) "k1"
3) "k3"
4) "key2"
5) "k2"
6) "mykey"
#对象
set user:1{name:tj,age:3} #设置一个user:1 对象 值为json字符来保存一个对象
#user:{id}:{fild} 这种设计在Redis中是可以的
127.0.0.1:6379[1]> mset user:1:name tj user:1:age 20
OK
127.0.0.1:6379[1]> mget user:1
1) (nil)
127.0.0.1:6379[1]> mget user:1:name
1) "tj"
127.0.0.1:6379[1]> mget user:1:name user:1:age
1) "tj"
2) "20"
###################
getset 命令
127.0.0.1:6379[1]> getset name tj #如果不存在值就返回空值,并设置新值
(nil)
127.0.0.1:6379[1]> get name
"tj"
127.0.0.1:6379[1]> getset name zr #如果存在值就返回当前值,并设置新值
"tj"
127.0.0.1:6379[1]> get name
"zr"
List类型
#类栈
127.0.0.1:6379[1]> LPUSH list one #将一个值或者多个值插入列表头部(左)
(integer) 1
127.0.0.1:6379[1]> LPUSH liat two
(integer) 1
127.0.0.1:6379[1]> LPUSH list two
(integer) 2
127.0.0.1:6379[1]> LPUSH list three
(integer) 3
127.0.0.1:6379[1]> LRANGE list 0 -1 #获取list 中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379[1]> LRANGE list 0 1 #获取区间中具体的值
1) "three"
2) "two"
127.0.0.1:6379[1]> RPUSH list right #将一个值或者多个值插入列表头部(右)
(integer) 4
127.0.0.1:6379[1]> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
#######################POP#################
127.0.0.1:6379[1]> LPOP list #移除list的第一个元素
"three"
127.0.0.1:6379[1]> RPOP list #移除list的最后一个元素
"right"
127.0.0.1:6379[1]> lrange list 0 -1
1) "two"
2) "one"
#######################INdex#################
127.0.0.1:6379[1]> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379[1]> Lindex list 1 #通过下标获得list的值
"one"
127.0.0.1:6379[1]> Lindex list 0
"two"
#######################Llen#################
127.0.0.1:6379[1]> Llen list #获取list的长度
(integer) 2
#######################移除指定的值#########
127.0.0.1:6379> lrem list 1 one #移除list中指定个数的value
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "four"
127.0.0.1:6379> Lpush list three
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
4) "four"
127.0.0.1:6379> lrem list 2 three #移除两个three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "four"
#################TRim######
trim
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "four"
5) "one"
127.0.0.1:6379> ltrim list 0 3 #截取list的0到3,并且list已经被改变,只剩下被截取的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "four"
####################移除链表的最后一个元素###########
rpoplpush#移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "four"
127.0.0.1:6379> RPOPLPUSH list list1
"two"
127.0.0.1:6379> lrange list1 0 -1
1) "two"
#########################################
lset list 0 item #将列表中指定下标的值替换到另外的值
#如果列表不存在或者下标不存在,就会替换失败
################插入################
127.0.0.1:6379> LINSERT list before "four" "one" #在four之后插入one
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "four"
3) "three"
127.0.0.1:6379> LINSERT list after one five #在one之后插入
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "five"
3) "four"
4) "three"
set类型
set 中的值不能重复,无序
127.0.0.1:6379[1]> sadd set one #在set集合中添加值
(integer) 1
127.0.0.1:6379[1]> sadd set two
(integer) 1
127.0.0.1:6379[1]> sadd set three
(integer) 1
127.0.0.1:6379[1]> sadd set four
(integer) 1
127.0.0.1:6379[1]> sadd set five
(integer) 1
127.0.0.1:6379[1]> SMEMBERS set #查看set集合
1) "four"
2) "two"
3) "three"
4) "one"
5) "five"
127.0.0.1:6379[1]> SISMEMBER set one #判断set集合中是否存在某个值
(integer) 1
127.0.0.1:6379[1]> SCARD set #查看set长度
(integer) 5
127.0.0.1:6379[1]> SREM set four #移除set的指定元素
(integer) 1
127.0.0.1:6379[1]> SMEMBERS set
1) "five"
2) "two"
3) "one"
4) "three"
127.0.0.1:6379[1]> SRANDMEMBER set 3 #随机抽出三个元素
1) "two"
2) "three"
3) "one"
127.0.0.1:6379[1]> SRANDMEMBER set #随机抽出一个元素
"two"
127.0.0.1:6379[1]> SRANDMEMBER set
"three"
#####随机删除一个值######
127.0.0.1:6379[1]> SPOP set #随机删除一个值
"three"
127.0.0.1:6379[1]> SMEMBERS set
1) "five"
2) "two"
3) "one"
####将一个指定的值移动#####
127.0.0.1:6379[1]> sadd set1 1
(integer) 1
127.0.0.1:6379[1]> smove set set1 five #移动一个指定的值到另一个set集合
(integer) 1
127.0.0.1:6379[1]> SMEMBERS set
1) "two"
2) "one"
127.0.0.1:6379[1]> SMEMBERS set1
1) "five"
2) "1"
###################################
数字集合类
交集、并集、补集
127.0.0.1:6379[1]> sadd set a
(integer) 1
127.0.0.1:6379[1]> sadd set b
(integer) 1
127.0.0.1:6379[1]> sadd set c
(integer) 1
127.0.0.1:6379[1]> sadd set1 c
(integer) 1
127.0.0.1:6379[1]> sadd set1 d
(integer) 1
127.0.0.1:6379[1]> sadd set1 d
(integer) 0
127.0.0.1:6379[1]> sadd set1 e
(integer) 1
127.0.0.1:6379[1]> SINTER set set1 #交集
1) "c"
127.0.0.1:6379[1]> SDIFF set set1 #set1在set的补集
1) "a"
2) "b"
127.0.0.1:6379[1]> SDIFF set1 set #set在set1的补集
1) "e"
2) "d"
127.0.0.1:6379[1]> SUNION set set1 #并集
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
Hash类型
map集合,key-value 的时候这个值是一个map集合!
127.0.0.1:6379[1]> hset hash key v1 #设置值
(integer) 1
127.0.0.1:6379[1]> HGET hash key #获取值
"v1"
127.0.0.1:6379[1]> hmset hash key v1 key1 v2 #set多个key-value值
OK
127.0.0.1:6379[1]> HMGET hash key key1 #获取多个字段值
1) "v1"
2) "v2"
127.0.0.1:6379[1]> HGETALL hash #获取全部的值
1) "fieldl"
2) "kuang"
3) "key"
4) "v1"
5) "key1"
6) "v2"
127.0.0.1:6379[1]> hdel hash fieldl #删除指定的key字段
(integer) 1
127.0.0.1:6379[1]> HGETALL hash
1) "key"
2) "v1"
3) "key1"
4) "v2"
###################################
127.0.0.1:6379[1]> hlen hash #获取hash的长度
(integer) 2
127.0.0.1:6379[1]> HEXISTS hash key #判断hash中是否存在指定字段
(integer) 1
127.0.0.1:6379[1]> HEXISTS hash key2
(integer) 0
###################################
127.0.0.1:6379[1]> hkeys hash #获取所有的key
1) "key"
2) "key1"
127.0.0.1:6379[1]> hvals hash #获取所有的value
1) "v1"
2) "v2"
127.0.0.1:6379[1]> hset hash k2 5
(integer) 1
127.0.0.1:6379[1]> HINCRBY hash k2 1 #指定增量
(integer) 6
127.0.0.1:6379[1]> HSETNX hash k1 12 #不存在可以设置
(integer) 1
127.0.0.1:6379[1]> HSETNX hash k1 12 #存在不能设置
(integer) 0
Zset(有序集合)
在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1
127.0.0.1:6379[1]> zadd zset 1 one #添加一个值
(integer) 1
127.0.0.1:6379[1]> zadd zset 2 two 3 three #添加多个值
(integer) 2
127.0.0.1:6379[1]> ZRANGE zset 0 -1 #查看所有值
1) "one"
2) "two"
3) "three"
###############排序##################
(-inf)负无穷(+inf)正无穷
127.0.0.1:6379[1]> zadd zset 4 zero
(integer) 1
127.0.0.1:6379[1]> ZRANGEBYSCORE zset -inf +inf #排序
1) "one"
2) "two"
3) "three"
4) "zero"