标签:分布式锁 指定元素 开放源代码 flush 大数据 exp head use mon
翻译:
Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超级日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name crowned
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name #查询是否存在
(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> set name crowned
OK
127.0.0.1:6379> get name
"crowned"
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) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> type name #查看当前key的类型
string
127.0.0.1:6379> type age
string
?
有不会的命令可以在官网查询文档
127.0.0.1:6379> strlen name #获取字符串的长度
(integer) 7
127.0.0.1:6379> append name hello #追加字符串,如果当前key不存在,就等于set key
(integer) 12
127.0.0.1:6379> get name
"crownedhello"
######################################
127.0.0.1:6379> set views 0 #初始量为0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views #自增1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views #自减1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> incrby views 10 #设置步长 指定增量
(integer) 11
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> decrby views 5
(integer) 6
127.0.0.1:6379> get views
"6"
#############################################
#字符串范围 range
127.0.0.1:6379> set key1 hello,crowned #设置key1的值
OK
127.0.0.1:6379> get key1
"hello,crowned"
127.0.0.1:6379> getrange key1 0 3 #截取字符串
"hell"
127.0.0.1:6379> getrange key1 0 -1 #获取全部字符串 等于get key
"hello,crowned"
127.0.0.1:6379>
#################################
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> setrange key2 1 xx #替换指定位置开始的字符串
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
#######################################
# setex (set with expire) 设置过期时间
# setnx (set if not exist) 不存在再设置(再分布式锁中常常使用)
127.0.0.1:6379> setex key1 10 hello #设置key1的值为hello,10秒后过期
OK
127.0.0.1:6379> ttl key1
(integer) 6
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> setnx key2 redis #如果不存在key2 就创建key2
(integer) 1
127.0.0.1:6379> keys *
1) "key2"
127.0.0.1:6379> ttl key1
(integer) -2
127.0.0.1:6379> setnx key2 mongodb #如果key2存在 就创建失败
(integer) 0
127.0.0.1:6379> get key2
"redis"
######################################
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
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)
127.0.0.1:6379>
############################################
#设置对象
set user:1{name:zhangsan,age:3} #设置一个user:1对象 值为json字符来保存一个对象
#这里的key是一个巧妙地设计: user:{id}:{filed} 这个设计在redis中是ok的
127.0.0.1:6379> mset user:1:name crowned user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "crowned"
2) "18"
########################################
#getset 先get再set
127.0.0.1:6379> getset redis mongodb #如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get redis