redis
dis是一个开源(BSD许可)的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,它可以用作数据库、缓存和消息中间件,并提供多种语言的API。从2010年3月15日起,redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
常用基础命令
清空redis所有key
flushdb 清空当前数据库所有的key
flushall 清空所有数据库的key
切换数据库
select 3 却换至3号数据库 redis总共有16个数据库 默认位0号数据库
dbsize 查看当前数据库的大小
keys * 查看当前数据库所有的key
redis是单线程、redis不区分大小写指令;
redis五大数据类型
redis-key
翻译后
127.0.0.1:6379> set name nihao 添加key位name值为nihao
OK
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> keys * 查看所有的key
1) "age"
2) "name"
127.0.0.1:6379> exists name 判断key=name是否存在 存在返回1 不存在返回 0
(integer) 1
127.0.0.1:6379> exists cc
(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> set name hello
OK
127.0.0.1:6379> expire name 10 当前key设置过期时间
(integer) 1
127.0.0.1:6379> ttl name 查看当前key剩余多长时间过期
(integer) 7
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> get name key已经过期
(nil)
127.0.0.1:6379>
127.0.0.1:6379> type name 查看当前key什么类型
string
String(字符串)
127.0.0.1:6379> set name hello 设置值
OK
127.0.0.1:6379> get name 获取值
"hello"
127.0.0.1:6379> append name word 在末尾添加值,如果key不存在,创建key
(integer) 9
127.0.0.1:6379> get name
"helloword"
127.0.0.1:6379> strlen name 获取值的长度
(integer) 9
127.0.0.1:6379> set count 0
OK
127.0.0.1:6379> get count
"0"
127.0.0.1:6379> incr count 每次加一 相当与i++
(integer) 1
127.0.0.1:6379> incr count
(integer) 2
127.0.0.1:6379> incr count
(integer) 3
127.0.0.1:6379> decr count
(integer) 2
127.0.0.1:6379> decr count 每次减一 相当与i--
(integer) 1
127.0.0.1:6379> decr count
(integer) 0
127.0.0.1:6379> decr count
(integer) -1
######################################################
步长设置
127.0.0.1:6379> incrby count 10 每次添加10 相当于i+=10
(integer) 9
127.0.0.1:6379> incrby count 10
(integer) 19
127.0.0.1:6379> decrby count 10 每次减少10 相当于i-=10
(integer) 9
127.0.0.1:6379> decrby count 10
(integer) -1
#########################################################
字符串的截取
127.0.0.1:6379> set name helloword 设置值
OK
127.0.0.1:6379> get name
"helloword"
127.0.0.1:6379> getrange name 0 3 字符串截取【0,3】 相当于 subString()
"hell"
127.0.0.1:6379> get name
"helloword"
127.0.0.1:6379> getrange name 0 -1 -1表示截取全部 相当于get name
"helloword"
127.0.0.1:6379>
###########################################################
字符串替换
127.0.0.1:6379> set name helloword
OK
127.0.0.1:6379> get name
"helloword"
127.0.0.1:6379> setrange name 5 tomcat 从第5位数开始 将后面的值替换位 tomcat
相当于 replice()方法
(integer) 11
127.0.0.1:6379> get name
"hellotomcat"
###############################################################
127.0.0.1:6379> setex name 60 helloword 设置name的值60秒过期
OK
127.0.0.1:6379> ttl name 查看name剩余过期时间
(integer) 57
127.0.0.1:6379> ttl name
(integer) 54
127.0.0.1:6379> get name 获取name的值
"helloword"
127.0.0.1:6379> keys * 查看所有的key
1) "name"
127.0.0.1:6379> ttl name
(integer) 13
127.0.0.1:6379> setnx mykey redis 设置mykey的值 如果存在不覆盖值 返回0设置失败 如果不存在 返回1 设置成功
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379> setnx mykey mongoDb 已存在mykey 设置失败
(integer) 0
以下操作如果存在会覆盖 不存在添加
127.0.0.1:6379> set name 111
OK
127.0.0.1:6379> get name
"111"
127.0.0.1:6379> set name 222
OK
127.0.0.1:6379> get name
"222"
###################################################
mset mget同时可以设置多个值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 同时设置k1 k2 k3的值
OK
127.0.0.1:6379> keys * 同时获取所有的key
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> mget k1 k2 k3 获取k1 k2 k3的值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 设置k1 k4的值 设置失败 应为k1已经存在 msetnx是原子性操作
(integer) 0
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379>
########################################################
getset 先get后set
127.0.0.1:6379> getset name hello 先取值然后赋值
(nil)
127.0.0.1:6379> getset name hello
"hello"
127.0.0.1:6379> getset name redis 如果存在值 先获取原来的值 并设置新的值
"hello"
127.0.0.1:6379> getset name redis
"redis"
127.0.0.1:6379>
List(所有的list指令都是以l开头)
127.0.0.1:6379> lpush list one 将一个值或多个值放到列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1 通过区间获取具体的值
1) "three"
2) "two"
127.0.0.1:6379> rpush list right 将一个值或多个值放到列表的尾部(右)
(integer) 4
127.0.0.1:6379> rpush list right
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
5) "right"
####################################################################
移除列表元素
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
5) "right"
127.0.0.1:6379> lpop list 移除左侧第一个元素
"three"
127.0.0.1:6379> rpop list 移除右侧第一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
######################################################################
通过索引值获取列表值
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list 1
"one"
#####################################################################
获取列表的长度
127.0.0.1:6379> llen list
(integer) 3
#######################################################################
移除指定的值
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpush list right
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
4) "right"
127.0.0.1:6379> lrem list 1 right
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpush list right
(integer) 4
127.0.0.1:6379> lrem list 2 right
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>