全民学NoSQL之KV类型数据库Redis
0.导语
每个人都应该懂点NoSQL知识; 每个人都应该学点Redis知识; 每个人都应该看一下这篇文章;
Let's Go,发车了,第一弹:Redis的字符串类型使用。
1.安装
官网地址:
https://redis.io/
编译与安装:
代码语言:javascript复制wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make
服务端启动:
代码语言:javascript复制src/redis-server
客户端启动:
代码语言:javascript复制src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
3.字符串类型使用
键不存在:
代码语言:javascript复制setnx k1 asda
不存在的才创建,存在不修改
代码语言:javascript复制set k1 asd nx
存在的修改,不存在不创建
代码语言:javascript复制set k1 asd xx
获取类型
代码语言:javascript复制type k1
获取标记
代码语言:javascript复制k1:"aaa",k2:5
127.0.0.1:6379> object encoding k1
"embstr"
127.0.0.1:6379> object encoding k2
"int"
MSET设置多个键的字符串值
代码语言:javascript复制127.0.0.1:6379> MSEt k3 1151 k4 1231
OK
键不存在时,设置字符串。只有全部不存在才生效。
代码语言:javascript复制127.0.0.1:6379> msetnx k1 ass k2 asda k5 "asda"
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
4) "key1"
5) "k4"
127.0.0.1:6379> get k1
"asd"
127.0.0.1:6379> msetnx k6 asda k5 "asda"
(integer) 1
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
4) "key1"
5) "k5"
6) "k4"
7) "k6"
查找键:
代码语言:javascript复制keys pattern
pattern取值:
*
任意长度字符?
任意一个字符[]
字符集合,表示可以是集合中的任意一个
键类型:
- type key
- object encoding key
键是否存在:
- exists key
键重命名:
- rename key newkey
- renamenx key newkey
键删除:
- del key [key …]
xxx为0-15编号,代码数据库编号
代码语言:javascript复制redis-cli -n xxx
例如:
代码语言:javascript复制light@city:~/bigdataproj/soft$ redis-cli -n 1
127.0.0.1:6379[1]> set k1 11
OK
127.0.0.1:6379[1]> quit
light@city:~/bigdataproj/soft$ redis-cli -n 2
127.0.0.1:6379[2]> keys *
(empty list or set)
127.0.0.1:6379[2]> quit
flushdb
与flushall
区别:
flushdb
只会清空当前数据库
light@city:~/bigdataproj/soft$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> quit
light@city:~/bigdataproj/soft$
light@city:~/bigdataproj/soft$ redis-cli -n 1
127.0.0.1:6379[1]> keys *
1) "k1"
flushall
会清空所有数据库
light@city:~/bigdataproj/soft$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> quit
light@city:~/bigdataproj/soft$ redis-cli -n 1
127.0.0.1:6379[1]> keys *
(empty list or set)
select
数据库之间切换
light@city:~/bigdataproj/soft$ redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "k1"
127.0.0.1:6379[1]> select 15
OK
127.0.0.1:6379[15]> keys *
(empty list or set)
127.0.0.1:6379[15]> set k15 2
OK
127.0.0.1:6379[15]> keys *
1) "k15"
127.0.0.1:6379[15]>
中文存储获取:
先修改键keys值为中,然后使用--raw登陆,就可以看到中文。
代码语言:javascript复制light@city:~/bigdataproj/soft$ redis-cli
127.0.0.1:6379> set keys 中 xx
OK
127.0.0.1:6379> get keys
"xe4xb8xad"
127.0.0.1:6379> strlen keys
(integer) 3
127.0.0.1:6379> quit
light@city:~/bigdataproj/soft$ redis-cli --raw
127.0.0.1:6379> get keys
中
getset
获取原来值,并修改。
127.0.0.1:6379> get k1
1
127.0.0.1:6379> getset k1 b
1
127.0.0.1:6379> get k1
b
megt
获取多个key值
127.0.0.1:6379> mget k1 k2
b
1
append
追加
127.0.0.1:6379> get k1
b
127.0.0.1:6379> append k1 hj
3
127.0.0.1:6379> get k1
bhj
setrange
覆盖字符串 setrange key offset value
127.0.0.1:6379> get k1
bhj
127.0.0.1:6379> setrange k1 1 2
3
127.0.0.1:6379> get k1
b2j
getrange
获取子串 getrange key start end
可以正也可以负向获取
127.0.0.1:6379> get k1
b2j
127.0.0.1:6379> getrange k1 0 1
b2
127.0.0.1:6379> getrange k1 0 -1
b2j
127.0.0.1:6379> getrange k1 -2 -1
2j
步长增减
- INCR key
- DECR key
incr递增key
127.0.0.1:6379> set k1 99
OK
127.0.0.1:6379> INCR k1
100
127.0.0.1:6379> INCR k1
101
127.0.0.1:6379> INCR k1
102
127.0.0.1:6379> INCR k1
103
127.0.0.1:6379> INCR k1
104
127.0.0.1:6379> incrby k1 5
109
127.0.0.1:6379> INCRBYFLOAT k1 5.5
114.5
位图操作
setbit key offset value
setbit k1 1 1
就是01000000对应的数字是64,对应的字符就是@,后面setbit k1 7 1
再这个基础上偏移7位设置1后就是01000001对应的数字是65,对应的字符就是A。
127.0.0.1:6379> setbit k1 1 1
(integer) 0
127.0.0.1:6379> get k1
"@"
127.0.0.1:6379> setbit k1 7 1
(integer) 0
127.0.0.1:6379> get k1
"A"