Redis-基础类型与命令

一、基础命令

select 2  选择2号数据库,redis默认有16个数据库,默认进入0号数据库

flushdb 删除当前数据库数据

flushall 删除所有数据库数据

keys * 查看当前库所以的key

exists key 是否存在key,返回1或0

move key 新的数据库 移动key到新数据库,一般不会用,如move key 3

expire key seconds设置过期时间,num单位是秒,如10,就是十秒后过期

ttl key 查看这个key还有多久过期,若该key未设置过期时间返回-1,当用户过期后返回-2

type key 查看key是什么类型

shutdown  关闭redis服务端

二、string(字符串)

默认情况下我们set key value就是字符类型

append key value ,value用引号包裹,会在原来的v后面追加值,若key不存在,就新增一个key,此时相当于set key value

strlen key 获取这个key对应v的长度

关于文章浏览量:我们不能每次都去数据库里加一或减一,可以在redis里做

set views 0 # 设置一个key作为文章的浏览量
incr views 每次对views加一
INCRBY views 10 每次对views加10,相当于设置步长
decr views 每次对views减一
DECRBY views 5 每次对views减5

切片:都是闭区间

set key1 hello,world
GETRANGE key1 0 3 截取key1第0-3的字符,是闭区间 "hell"
GETRANGE key1 0 -1 截取整个字符串
getrange key1 -1 -2 不会报错,但是返回空字符创
getrange key1 -2 -1 倒数第二个字符开始切片到最后,返回ld

替换:

set key1 abcdefgh
# SETRANGE key 偏移量 value
SETRANGE key1 1 xx
axxdefgh # 表示从索引1开始向后替换,而不是把索引1替换成xx,若超过了原来的长度,自动扩容

设置过期时间:setex

# setex(set with expire) # 在创key的时候就设置过期时间
setex key1 30 "hello"

# setnx(set if not exist) # 不存在再设置,在分布式锁中常用
setnx key2 "redis"  # 如果key2这个键不存在,就可以创建这个key。返回1
setnx key2 "mysql"  # 此时key2已经存在,就创建失败返回0而不是覆盖

批量设置值:mset

mset k1 v1 k2 v2 k3 v3 # 批量设置,设置三个键值对

mget k1 k2 k3  # 批量获取值

msetnx k1 v1 k4 v4 # msetnx是一个原子性操作,因为k1已经有了,所以无法创建,所以k4也不能设置
get k4 此时会返回空

先获取再操作,getset

先get再set,可用来做更新操作,如果值不存在就返回空,然后把后面的值设置进去,如果有值就返回值
getset db redis  # 此时db没有值,返回空
(nil)
get db  # 设置完了值,我们可以正常get
"redis"
getset db mysql  # db现在有值是redis,返回redis,然后设置新的value是mysql
"redis"
get db  # 设置了新的值我们get的值也是新的值
"mysql"

三、list(列表类型)

在redis里,可以把list设置成队列,栈,阻塞队列等,所有的list命令都是l开头。

他实际是一个链表。

如果key不存在,就创建新的链表,如果key存在,就新增内容

如果移除了所有的值,就成了空链表,也就不存在了

因为是链表,所以在两边插入或者改动值的效率最高,对中间元素的效率较低

# lpush为从左向右加值,rpush为从右向左加值
LPUSH list one  # 以list为key,one为值进行存值
LPUSH list two
LPUSH list three

# lrange 相当于切片
LRANGE list 0 -1  # 返回three,two,one,也可以用来查看当前这个列表内的元素
LRANGE list 0 1  # 返回three,two

# Lpop 从左边开始删除值,RPOP从右边开始删除值
Lpop list
Rpop list

lindex list 2  # 根据索引取值

Llen list # 返回长度

lrem list 2 one  # 在list里,移除one这个值,从上往下移除两个,也可以只移除第一个,就写1,可以用于取消关注等

ltrim list 1 2 # 截取,剩下的list就是我们截取的,写1,-1就是全部截取

rpoppush list1 list2  # 把list1的右边第一个值移动到list2里

lset list 0 hello  # 相当于替换操作

linsert list before hello other # 插入,可指定在前面before或者后面after,在hello前面插入other

四、set(集合类型)

set中的值不能重复,基本数据结构,python中也有。集合常常用于比如微博,A用户所有关注的人放在一个集合里,A的粉丝都放在另一个集合。然后就可以很容易的找到共同关注,共同好友,共同爱好,好友推荐等等。

sadd set1 'hello'
sadd set1 'hello1'
sadd set1 'hello2'

smembers set1 # 返回集合里的元素

sismenber set1 hello # 看看hello在不在set1里面。返回1,则存在,返回0,就不存在

scard set1 # 获取集合中元素个数,注意和smembers的区别

srem set1 hello # 移除某个元素

srandmember set1 # 随机获取集合中的一个元素
srandmember set1 2 # 随机获取集合中的两个元素

spop set1 # 随机移除一个元素,比如抽奖的时候,可以随机移除一个元素,这个人就是获奖的人

smove set1 set2 hello # 把hello从set1移动到set2

# 共同关注,就是并集,在python中,可以用set1 & set2
sdiff set1 set2 # 差集
sinter set1 set2 # 交集
sunion set1 set2 # 并集

五、hash(哈希类型,散列表)

hset hash1 f1 yang # 存值
hget hash1 f1 # 取值

hmset hash1 f1 yang f2 egon # 批量存值
hmget hash1 f1 f2  # 批量取值

hgetall hash1  # 获取所有值

hdel hash1 f1  # 指定删除key,可以同时删除多个

hlen hash1  # 获取长度

hexists hash1 f1 # 判断指定字段是否存在

hkeys hash1 	# 获取hash的所有key
hvals hash1	    # 获取hash的所有values

HINCRBY hash1 num 2  # 步长为2递增
HINCRBY hash1 num -2 # 相当与hdecrby

hsetnx 和str类型一样

存变更的数据,尤其是变动的数据,比如user有name和age。hash更适合对象的存储,str更适合字符串的存储。

hset user:1 name yang age:18
hget user:1 name

六、Zset(有序集合)

有序集合,在set基础上增加了一个值

zadd zset1 1 one 		  # 存值
zadd zset1 2 two 3 three  # 批量存值

zrange zset1 0 -1  # 查看zset1里的所有元素

zadd salary 2500 yang 5000 egon 8000 lqz
zrangebycore salary -inf +inf # 从最小值到最大值排序
zrangebycore salary -inf +inf withscores
zrangebycore salary -inf 5000 

zrevrange salary 0 -1 # 从最大值到最小值排序

zrem salary yang
zcard zset1  # 获取有序集合中的个数

zcount zset1 1 3 # 获取指定区间内的元素个数,闭区间且开始索引位1

用处:

可以排序班级成绩,公司的工资,阅读排行榜等等,处理一些不是很重要的排序。

或者设计一个信息的通知,普通信息 1 重要信息 2 紧急信息 3

posted @ 2020-12-02 15:05  王寄鱼  阅读(71)  评论(0编辑  收藏  举报