Redis From Ubuntu?
Preface *Jack Lee*
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
Redis特点:
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。
Redis应用场景:
因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
注意: Redis中的数据以键值对的形式来存数据, 如果再次创建相同的Key会出现覆盖.
Redis默认有16个数据库, 使用SELEECT index
来切换数据库.
Getting Start
- Windows
到下载地址https://github.com/MSOpenTech/redis/releases
下载对应的文件, 然后解压到相应文件夹.
运行redis: redis-server.exe
redis.windows.conf
(后面的配置文件也可以不加.)
- Ubuntu
sudo apt-get update
sudo apt-get install redis-server
redis-server # 启动redis
redis-cli # 进入redis, redis-cli --raw(表示使用的配置文件, 不加表示使用默认的.)
Redis DATA_TYPE
- string: 字符串
- list: 列表
- hash: 哈希(Just like this: key {key:value} )
- set: 集合
- sorted sets: 有序集合(会设置一个分数, 来进行区分)
String Operation
# 设置string类型的key-value.
set key value # eg: set lls1 'shuai'
# 获取key对应的value. 注意key应该是唯一的, 再次set时不应使用已有的key不然会覆盖.
get key # eg: get lls1
# 给某个key追加新value.
append key value # eg: append lls1 'age18'
# set more string(KV).
mset key value key value... # eg: set lls1 'shuai' lls2 'age18'
# get more string(KV).
mget key key key.... # eg: mget lls1 lls2
# show all key.
keys *
# del a key.
del key # eg: del lls1
# check a key if exists(存在), if 1, if not 0.
exists key # eg: exists lls1
# check key type.
type key # eg: type lls2
# 计算, althrough value is string, but redis will check the string-content.
# 加 1 .
set key value # set num '1'
incr key # eg: incr num
get key
# 减 1 .
decr key # eg: decr num
get key
# 自定义加数.
incrby key increment # eg: incrby num 50
get key
# 自定义减数.
decrby key decrement # eg: decrby num 50
# 查看key-value过期时间(可以设置时间让对象过期消逝.)
ttl key # eg: ttl lls1
# 给某个KV设置过期时间.
expire key seconds # eg: expire lls2 2 2秒
# 在set KV 时设置time.
set key value ex seconds # eg: set lls2 'shuai' ex 2
List Operation
# stack?
# 设置(lpush=>left push)KV list, 像queue一样, 左进向右挤.
lpush key value1 value2... # eg: lpush lls1 'shuai'
# 把KV加到最后一个, 右进向左挤.
rpush key value1.... # eg: rpush lls2 'age18'
# show a key all value. 0 -1 表示索引, first element index: 0, last element index: -1.
lrange key 0 -1 # eg: lrange lls1 0 -1
# get list length(element amount).
llen key # eg: llen lls1
# get one-element of the list.
lindex key index # eg: lindex lls1 0
# del one-element of left.
lpop key # eg: lpop lls1
# del one-element of right.
rpop key # eg: rpop lls1
# 自定位置或批量删除数据, 从左至右(从上至下).
rpush lls1 a1 a2 a3 a4 a5 a1 a4 a2 a2
lrem key count value # eg: lrem lls1 1 a1
# 这里要注意一下, count为 0 时表示删除list中所有指定的value,
# count > 0时, 表示删除list中count个指定的value.
# count < 0时, 表示从右向左找数据来进行删除操作, 删除的数量为count, eg: -1 表示删除一个, -2 表示两个.
Hash Operation
- like this=> key={key: value}
# set hash key-field-value. field-value可以设置多个, 但是不能在条命令追加 field-vlaue.
hset key field value # eg: hset lls1 face 'shuai'
# get hash ..value.
hget key filed # eg: hget lls1 face
# del hash ..value. 可以在后面追加field 来删除多个. 删除后可以hget field但是没数据返回.
hdel key field # eg: hdel lls2 face
# set more key-field-value.
hmset key field1 value1 field2 value2...
# get more ..value.
hmget key field field...
# get all .field-value.
hgetall key # eg: hgetall lls2
# get all .field.
hkeys key # eg: hkeys lls2
# get all ..value.
hvals key # eg: hvals lls2
# get .field amount(length).
hlen key # eg: hlen lls2
Set Operation
- 集合: 具有集合特性.
# set KV. 可以设置多个value.
sadd key value1 value2.... # eg: sadd set_lls lls1 lls2 lls3
# get a key of values.
smembers key # eg: smembers set_lls
# 指定删除.
srem key member # eg: srem set_lls lls1
# 随机删除.
spop key # eg: spop set_lls
# 移动old集合的(member)值到另一个集合. 注意这里是移动.
smove oldkey newkey member # eg: smove set_lls new_lls lls2
# 判断集合的某个值是否exists(存在). 返回 1 , 0
sismember key member # eg: sismember set_lls lls5
# 获取交集.
sinter key1 key2... # eg: sinter set_lls new_lls
# 将交集赋给另一个集合.
sinterstore newkey key1 key2 # eg: sinterstore new_new_lls set_lls new_lls
# get并集. 把并集扔给另一个集合的命令如同上.
sunion key1 key2... # eg: sunion set_lls new_lls
# get差集. 把差集扔给另一集合的命令如同上上.
sdiff key1 key2 # eg: sdiff set_lls new_lls
# get集合中值的个数.
scard key # eg: scard set_lls
# 随机返回一个值, count可加也可不加, 不加默认返回一个, 加了返回count个.
srandmember key [.count] # eg: srandmember set_lls
Zset Operation
# 设置KCM.
zadd key score1 member1.... # eg: zdd z_lls 1 'one' 2 'two' 3 'three'
# 获取(zrange)正序.
zrange key 0 -1 # eg: zrange z_lls 0 -1
# 获取(zrevrange)倒序.
zrevrange key 0 -1 # eg: zrevrange z_lls 0 -1
# 删除.member.
zrem key member # eg: zrem z_lls 'two'
# 获得索引-正序.
zrank key member # eg: zrank z_lls 'one'
# 获得索引-反序.
zrevrank key member # eg: zrevrank z_lls 'one'
# 查看score值.
zscore key member # eg: zscore z_lls 'one'
# 修改score. 自增score.
zincrby key score member # eg: zincrby z_lls 1 'one'
# 查看元素个数.
zcard key # eg: zcard z_lls
# 返回集合中score在给定区间的元素.
zrangebyscore key score score withscore # eg: zrangebyscore z_lls 1 3 withscore
# 返回集合中score在给定区间的元素数量.
zcount key score score # eg: zcount z_lls 1 3
# 删除集合中排名在给定区间的元素.
zremrangebyrank key inex inex # eg: zremrangebyrank z_lls 0 2
# 删除集合中 score 在给定区间的元素.
zremrangebyscore key score score # eg: zremrangebyscore z_lls 1 2
Redis 发布(Publish)和订阅(Subscribe)
# 订阅
subscribe 频道
# 发布
publish 频道 消息
DELECT KEY
# 删除当前数据库中的键.
FLUSHDB
# 删除所有数据库中的键.
FLUSHALL
DATA Persistence
- RDB: 设置条件, 条件出触发后把数据存入到对应文件中. 类似快照.
- AOF: 手动使用写命令, 将数据保存到对应文件中.