一、redis介绍
redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库,redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset、hash。
redis特点:
- 快速响应,数据量小。
- redis以内存作为数据存储介质,所以读写数据的效率特别高,远远超过其他数据库
redis应用场景:如点赞。
二、redis的五种数据类型
1、string字符串
2、list列表
3、hash哈希
4、set集合
5、sorted sets有序集合
三、redis数据操作
# 进入redis redis-cli --raw # 安装redis: sudoi apt-get update sudo apt-get install redis-server
1、string字符串操作
string字符串可以为整形、浮点型和字符串,统称为无素。
> 基本操作:
# 设置: set key value 如:set name 'weiwei' # 获取value值 get key 如:get name # key是唯一的,不能使用同一个key,不然就会覆盖
> key操作
# 查看所有的key keys * # 删除key del key 如:del name # 查看key是否存在,存在返回1,不存在返回0 exists key # 查看key类型 type key
> 查看过期时间
# -1:表示永久,-2:表示不存在 ttl key 如:ttl name
> 设置过期时间
# 给已经存在的key,设置过期时间 expire key seconds 如:expire name 20 # 设置key的同时,设置过期时间 set key value ex seconds 如:set age 18 ex 20 或 setex key seconds value 如:setex sex 20 '男'
> 追加
# 给已有的value,再添加新的值
append key value 如:append name xiaoxiao
> 设置多个string
mset key value key value 如:mset name '小小' age 20
> 获取多个string
mget key key key .... 如:mget name age
> 运算
set num 1 # value+1 incr key 如:incr num # value-1 decr key 如:decr num # 自定义:+整数 incrby key increment 如:incrby num 50 # 自定义:-整数 decrby key increment 如:decrby num 50
1.2、list
list:实现队列,元素不唯一,先入先出原则
> 设置
# lpush:左添加 (栈:先进后出) lpush key value 如:lpush name a b c d # rpush:右添加 (队列:先进先出) rpush key value 如:rpush age 20 21 22 23
> 查看
lrange key start stop 如:lrange name 0 -1 (查看所有)
> 获得list的元素个数
llen key 如:llen name
> 查看位于index位置上的元素
lindex key index 如:lindex name 3
> 删除
# lpop:删除左边第一个 lpop key 如:lpop name # rpop:删除右边第一个 rpop key 如:rpop name #lrem:删除指定 # count>0,从左往右,删除数量为count的value lrem age 2 20 # count=0,删除所有的value lrem age 0 21 # count<0,从右往左,删除数量为count的value lrem age -1 22
1.3、hash
hash:是一个string类型的field和value的映射表key:(field:value),特别适合用于存储对象,hash的key必须是唯一的。
> 设置
hset key field value 如:hset user name lucky # 设置多个 hmset key field value [field value] 如:hmset user name lucky age 18 sex '男'
> 获取
hget key field 如:hget user name
# 获取多个
hmget key field field 如:hmget user name age
# 获取所有的field value
hgetall key 如:hgetall user
# 获取所有的field
hkeys key 如:hkeys user
# 获取所有的value
hvals key 如:hvals user
# 获取field的个数
hlen key 如:hlen user
# 获取field的类型
type key 如:type user
> 删除
hdel key field 如:hdel user name
1.4、set集合
> 设置
sadd key value [value ...] 如:sadd age 21 22 25 24 23
> 获取
smembers key 如:smembers age
> 删除
# srem:指定删除 srem key member 如:srem age 21 # spop:随机删除 spop key 如:spop age
> 移动一个集合的值到另一个集合
smove oldkey newkey member 如:smove ages age 1
> 判断集合是否存在某个值(1存在,0不存在)
sismember key value 如:sismember age 1
> 交集
sinter key1 key2 ... 如:sinter age ages
# 将key1、key2的交集合并到newkey
sinterstore newkey key1 key2 如:sinterstore name age ages
> 并集
sunion key1 key2 ... 如:sunion age ages
# 将key1,key2的并集合并到newkey
sunionstore newkey key1 key2 如:sunionstore names age ages
> 差集
sdiff key1 key2 如:sdiff age ages
# 将key1,key2的差集合并到newkey
sdiffstore newkey key1 key2 如:sdiffstore names age ages
> 获取集合个数
scard key 如:scard names
> 随机返回一个
srandmember key 如:srandmember names
1.5、sorted set(有序集合)
> 设置
zadd key score member (权,权重。顺序) 如: zadd my_zset 1 'one' zadd my_zset 2 'two' zadd my_zset 3 'three' zadd my_zset 4 'four' zadd my_zset 5 'five'
> 获取
# zrange:正序 zrange key start stop 如:zrange my_zset 0 -1 # zrevrange:倒序 zrevrange key start stop 如:zrevrange my_zset 0 -1
> 删除
zrem key member 如:zrem my_zset two
> 索引
# zrank:正序
zrank key member 如:zrank my_zset three
# zrevrank:反序
zrevrank key member 如:zrevrank my_zset three
> zcard:查看有序集合元素数
zcard key 如: zcard my_zset
> zrangebyscore:返回集合中score在给定区间的元素
zrangebyscore my_zset 2 3 withscores
> zcount:返回集合中score在给定区间的数量
zcount key min max 如:zcount my_zset 2 3
> zscore:查看score的值
zscore key member 如:zscore my_zset one
> zremrangebyrank:删除集合中排名在给定区间的元素
zremrangebyrank my_zset 1 3
> zremrangebyscore:删除集合中score在给定区间的元素
zremrangebyscore my_zset 1 2