redis简单使用

安装好了redis,下面我们来简单试用一下redis

一般redis有16个库,切换库

select 1

切换到第二个库

设置 aaa

set aaa 111

获取aaa

127.0.0.1:6379[1]> get aaa
"111"

再切换到第一个数据库,再获取aaa 发现是nil

127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get aaa
(nil)

如上图所示。

当前在第一个数据库,我们删除此数据库的东西

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> get aaa
(nil)

再切换到第二个数据库,查询一下aaa还有吗:

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get aaa
"111"

发现还在,接下来我们切换到第三个数据库,然后执行删除所有库(flushall),然后在切换到第二个数据库,然后查看aaa

127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> get aaa
(nil)
127.0.0.1:6379[2]> flushall
OK
127.0.0.1:6379[2]> get aaa
(nil)
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> get aaa
(nil)

查询所有的键:

127.0.0.1:6379> keys *
1) "aaa"
2) "bbb"

查看当前数据库的容量:

127.0.0.1:6379> dbsize
(integer) 2

查询一个键是否存在:

127.0.0.1:6379> exists aaa
(integer) 1

如果存在就是1 如果不存在就是0

删除一个键
 

127.0.0.1:6379> del aaa
(integer) 1
127.0.0.1:6379> keys *
1) "bbb"

查询设置的数据类型

127.0.0.1:6379> set aaa jielun
OK
127.0.0.1:6379> type aaa
string

 

127.0.0.1:6379> set ccc 345
OK
127.0.0.1:6379> type ccc
string

redis一共有几种数据类型

一般有:String / Lists / Sets / Sorted Sets / Hashes

redis 中字符串(String)可以存储什么类型的数据:

1.int

2.float

3.String

批量set值:

 

127.0.0.1:6379> mset qingshan 2673 jack 666
OK
127.0.0.1:6379> get qingshan
"2673"
127.0.0.1:6379> get jack
"666"

 

设置值(只有这个键不存在的时候才可以成功) setnx 
 

127.0.0.1:6379> setnx qingshan 8787
(integer) 0
127.0.0.1:6379> get qingshan 
"2673"

因为已经存在qingshan了,所以setnx设置不成功 如果是set的话键即使存在也会覆盖

所以setnx可以做分布式锁,释放锁 就用 del key

比如我们设置一把锁:

127.0.0.1:6379>  setnx lock 2673
(integer) 1
127.0.0.1:6379> get lock
"2673"

给这把锁(lock这个键)设置过期时间 expire

127.0.0.1:6379> expire lock 10
(integer) 1
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
"2673"
127.0.0.1:6379> get lock
(nil)
127.0.0.1:6379> get lock
(nil)

上文中我们给lock这个键设置了过期时间为10秒,如上所示我一直获取lock的值,10秒后 就获取不到了

使用组合命令设置值并且设置过期时间,并且NX表示不存在的时候才能设置成功

127.0.0.1:6379> set lock 777 EX 20 NX
OK
127.0.0.1:6379> get lock
"777"
127.0.0.1:6379> get lock
"777"
127.0.0.1:6379> get lock
(nil)

表示给lock设置值为777 过期时间为20秒 只有在lock不存在的时候才可以设置成功

如下,我们先给lock设置一个值为666,然后在使用这个命令给lock设置值,没有成功,见下:

127.0.0.1:6379> set lock 666
OK
127.0.0.1:6379> get lock
"666"
127.0.0.1:6379> set lock 888 EX 10 NX
(nil)

我们给一个键设置数字之后对这个值进行加减操作

加1:incr key

 

127.0.0.1:6379> set aaa 123
OK
127.0.0.1:6379> get aaa
"123"
127.0.0.1:6379> incr aaa
(integer) 124
127.0.0.1:6379> get aaa
"124"

减1:decr key

127.0.0.1:6379> decr aaa
(integer) 123
127.0.0.1:6379> get aaa
"123"

给一个键设置浮点数,并且进行加法(incrbyfloat):

127.0.0.1:6379> set f 2.6
OK
127.0.0.1:6379> get f
"2.6"
127.0.0.1:6379> incrbyfloat f 7.3
"9.9"
127.0.0.1:6379> get f
"9.9"

批量获取值:

127.0.0.1:6379> mget qingshan aaa jack f
1) "2673"
2) "123"
3) "666"
4) "9.9"

这种批量的操作也是原子性的,不会发送三条命令

给字符串后面添加字符串(append)

127.0.0.1:6379> get qingshan 
"2673"
127.0.0.1:6379> append qingshan goodteacher
(integer) 15
127.0.0.1:6379> get qingshan
"2673goodteacher"

 

reids 底层是怎么存储的?

以这个为例:给hello 设置 world

127.0.0.1:6379> set hello world
OK

 

String 有三种编码

1.int,存储8个字节的cc长整型(long, 2*63-1)

2.embstr(小于44个字节),embstr格式的SDS

3.raw,SDS,存储大于44个字节的字符串

使用 object encoding key 来查询一个键值使用社么编码存储的我们来做一个实验

127.0.0.1:6379> mset b1 123 b2 str b3 6789
OK
127.0.0.1:6379> mget b1 b2 b3
1) "123"
2) "str"
3) "6789"
127.0.0.1:6379> object encoding b1
"int"
127.0.0.1:6379> object encoding b2
"embstr"
127.0.0.1:6379> object encoding b3
"int"
127.0.0.1:6379> append b3 hello
(integer) 9
127.0.0.1:6379> get b3
"6789hello"
127.0.0.1:6379> object encoding b3
"raw"

如上所示 我们先批量给b1,b2,b3 分别设置 123,str,6789

然后我们使用object encoding key 分别查看 b1, b2, b3 底层存储的SDS的类型

我们看到 b1=123 是int

b2=str 是embstr

b3=6789 是int

b3 是 6789 当然是int 那么我们给b3 追加一个hello 变成6789hello

我们再来看 object encoding b3 我们看到了 第三种类型 raw

embstr和raw的区别

embstr 分配内存的时候就一次分布是连续的

但是raw 分配内存时多分配了一次,是不连续的

 

 

Spring的应用场景

1.缓存

2.分布式Session

3.分布式锁 setnx NX

4.全局ID的实现(incr)

5.计数器(incr)--点赞数,阅读量

6.限流 (incr)

7.位操作

 

redis设置hash

hset(key, field, value)   --> 设置hash的操作

# 参数:     # key,redis的key# keyfield对应的hash中的key

# value,name对应的hash中的value

# 注:     # hsetnx(key, field, value),当name对应的hash中不存在当前key时则创建(相当于添加)

127.0.0.1:6379[1]> hset h1 f 6
(integer) 1
127.0.0.1:6379[1]> hget h1
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379[1]> hget h1 f
"6"

批量设置,批量设置 h1 a=1 b=2 c=3 d=4

127.0.0.1:6379[1]> hmset h1 a 1 b 2 c 3 d 4 
OK

获取h1 的 a 的value

127.0.0.1:6379[1]> hget h1 a
"1"

批量获取key为h1 的 field为a,b,c,d的value

127.0.0.1:6379[1]> hmget h1 a b c d
1) "1"
2) "2"
3) "3"
4) "4"

获取key为h1的所有fields

127.0.0.1:6379[1]> hkeys h1
1) "a"
2) "b"
3) "c"
4) "d"

获取key为h1 的所有values

127.0.0.1:6379[1]> hvals h1
1) "1"
2) "2"
3) "3"
4) "4"

获取key为h1 的所有fields和values

127.0.0.1:6379[1]> hgetall h1
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"

reids中Hash的存储结构有两种:

1.ziplist (压缩列表)

2.ht(hashtable)

redis中Hash的应用场景

key:用户id

field:商品id

value:商品数量

 

+1:hincr

-1:   hdecr

删除:hdel

全选:hgetall

商品数:hlen

 

不积跬步,无以至千里

不积小流,无以成江海

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值