Redis

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: 手动使用写命令, 将数据保存到对应文件中.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值