redis 初步学习

Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。

Redis从它的许多竞争继承来的三个主要特点:

  • Redis数据库完全在内存中,使用磁盘仅用于持久性。
  • 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。
  • Redis可以将数据复制到任意数量的从服务器。


Redis支持5种类型的数据类型,它描述如下的:数据类型指的是对应的redis索引值下边存放的内容,其实可以将redis的key值理解成索引。


ListSet的区别:

1List,Set都是继承自Collection接口

2List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 

3List接口有三个实现类:LinkedListArrayListVector Set接口有两个实现类:HashSet(底层由HashMap实现)LinkedHashSet

一:String 类型:

localhost:6379> set name "xiaohui"

OK

localhost:6379> get name

"xiaohui"


二、哈希

Redis的哈希是键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象,其实我认为的就是哈希是对一个的key中存放的内容是key和value形式的。 至于一下采用的user:1 表示的索引值,其实指的是目录形式,冒号表示一层目录。


localhost:6379> HMSET user:1 username xiaohui password 1234 points 20

OK

localhost:6379> HGETALL user:1

1) "username"

2) "xiaohui"

3) "password"

4) "1234"

5) "points"

6) "20"


三:集合SET

Redis的集合是字符串的无序集合。在Redis您可以添加,删除和测试文件是否存在,在成员O1)的时间复杂度。注意:在下面的例子中rabitmq集合添加加两次,但由于集合元素具有唯一属性。


localhost:6379> sadd tutor reids

(integer) 1

localhost:6379> sadd tutor mongodb

(integer) 1

localhost:6379> sadd tutor rabitmq

(integer) 1

localhost:6379> sadd tutor rabitmq

(integer) 0

localhost:6379> smembers tutor

1) "mongodb"

2) "rabitmq"

3) "reids"


四:有序集合:ZSET

Redis的有序集合类似于Redis的集合,字符串不重复的集合。不同的是,一个有序集合的每个成员用分数,以便采取有序set命令,从最小的到最大的成员分数有关。虽然成员具有唯一性,但分数可能会重复


localhost:6379> zadd zset 1 redis

(integer) 1

localhost:6379> zadd zset 2 mongodb

(integer) 1

localhost:6379> zadd zset 6 mysql

(integer) 1

localhost:6379> zadd zset 3 "sql server"

(integer) 1

localhost:6379> zadd zset 3 "nosql"

(integer) 1

localhost:6379> zrange zset 0 10

1) "redis"

2) "mongodb"

3) "nosql"

4) "sql server"

5) "mysql"


五:Redis - 列表 LIST

Redis的列表是简单的字符串列表,排序插入顺序。您可以添加Redis元素在列表头部或列表的尾部。

列表的最大长度为 232 - 1 个元素(每个列表元素个数超过4294967295)。


localhost:6379> lpush list "name"

(integer) 1

localhost:6379> lpush list "age"

(integer) 2

localhost:6379> lpush list "sex"

(integer) 3

localhost:6379> lpush list "is agree leads"

(integer) 4

localhost:6379> lpush list "description"

(integer) 5

localhost:6379> lpush list "name"

(integer) 6

localhost:6379> lrange list 0 1000

1) "name"

2) "description"

3) "is agree leads"

4) "sex"

5) "age"

6) "name"

localhost:6379> lrange list 0 2

1) "description"

2) "is agree leads"

3) "sex"



六:RedisHyperLogLog使用随机化,以提供唯一的元素数目近似的集合只使用一个常数,并且体积小,少量内存的算法。

HyperLogLog提供,即使每个使用了非常少量的内存(12千字节),标准误差为集合的基数非常近似,没有限制的条目数,可以指定,除非接近 264个条目。


localhost:6379> pfadd hyperlog redis

(integer) 1

localhost:6379> pfadd hyperlog mongodb

(integer) 1

localhost:6379> pfadd hyperlog mysql

(integer) 1

localhost:6379> pfcount hyperlog

(integer) 3

localhost:6379> get hyperlog

"HYLL\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00H\x91\x80K\xe7\x8cP~\x84[\x03"



七:Redis - 订阅

Redis的订阅实现了邮件系统,发送者(在Redis的术语中被称为发布者)发送的邮件,而接收器(用户)接收它们。由该消息传送的链路被称为通道。其实十分类似于kafka的消息订阅机制,客户端确定一个topic,在redis中被叫做通道,然后发送方向该通道中写消息,订阅方从该通道中读消息


先打开订阅方

localhost:6379> subscribe redisChat

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "redisChat"

3) (integer) 1

1) "message"

2) "redisChat"

3) "xiaohui is very good"

1) "message"

2) "redisChat"

3) "how are you "


然后发送方发送数据

localhost:6379> pubish redisChat "xiaohui is very good"

(error) ERR unknown command 'pubish'

localhost:6379> publish redisChat "xiaohui is very good"

(integer) 1

localhost:6379> publish redisChat "how are you "

(integer) 1



八:Redis - 事务 

Redis事务让一组命令在单个步骤执行。事务中有两个属性,说明如下:

  • 在一个事务中的所有命令按顺序执行作为单个隔离操作。通过另一个客户端发出的请求在Redis的事务的过程中执行,这是不可能的。
  • Redis的事务具有原子性。原子意味着要么所有的命令都执行或都不执行。



Redis INCR命令用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。



localhost:6379> set doctor tranction

QUEUED

localhost:6379> get doctor

QUEUED

localhost:6379> incr visitors

QUEUED

localhost:6379> exec

1) OK

2) "tranction"

3) (integer) 1



九:SAVE   redis 为当前数据库创建备份,当然也可以采用besave命令进行备份


localhost:6379> save

37943:M 04 Feb 17:28:33.477 * DB saved on disk

OK


十:Redis - 基准

Redis基准是公用工具同时运行Ñ命令检查Redis的性能。


./redis-benchmark -n 10000



十一:Redis 的一些配置信息


备份目录的存放地方

localhost:6379> config get dir        

1) "dir"

2) "/usr/local/Cellar/redis/3.0.7/bin"


客户端的最大数量

localhost:6379> config get maxclients

1) "maxclients"

2) "10000"


十二:Redis - 管道传输

Redis是一个TCP服务器,并支持请求/响应协议。在redis一个请求完成下面的步骤:

  • 客户端发送一个查询到服务器,并从套接字中读取,通常在阻塞的方式,对服务器的响应。
  • 服务器处理命令并将响应返回给客户端。


管道传输的含义

管道的基本含义是,客户端可以发送多个请求给服务器,而无需等待答复所有,并最后读取在单个步骤中的答复。


十三:redis一些基本命令

进入到redis目录下,然后进行

./redis-cli -h 10.10.39.150 -p 6379

localhost:6379> set rediKey value

OK

localhost:6379> set age 24

OK

localhost:6379> set name xiaohui

OK

localhost:6379> set sex female

OK



通过key值得到value:


localhost:6379> get rediKey

"value"


keys *命令:


localhost:6379> keys *

1) "sex"

2) "name"

3) "nova:comment:acceptor:2"

4) "nova:comment:acceptor:1"

5) "rediKey"

6) "age"


判断某个key是否存在:


localhost:6379> exists sex

(integer) 1

localhost:6379> exists chen

(integer) 0


删除某个key


localhost:6379> del rediKey

(integer) 1


重命名key  rename/renamenx

localhost:6379> rename name Name

OK

localhost:6379> renamenx age Age

(integer) 1


设置过期时间和持久化expire/persist还有个命令就是查看当前的情况,ttl意思是time to live

expire 设置key的超时时间为10s,ttl 是用来查看这个key还有多久超时

localhost:6379> expire sex 10

(integer) 1

localhost:6379> ttl sex

(integer) 7

localhost:6379> ttl sex

(integer) 3

localhost:6379> ttl sex

(integer) 1

localhost:6379> ttl sex

(integer) -2

localhost:6379> keys *

1) "nova:comment:acceptor:2"

2) "Name"

3) "nova:comment:acceptor:1"

4) "Age"



持久化Age这个key

localhost:6379> expire Age 20

(integer) 1

localhost:6379> ttl Age

(integer) 17

localhost:6379> persist Age

(integer) 1

localhost:6379> ttl Age

(integer) -1

localhost:6379> keys *

1) "nova:comment:acceptor:2"

2) "Name"

3) "nova:comment:acceptor:1"

4) "Age"


redis 默认有16个库存,然后进行选择和使用,从db0到db15,当没有进行选择ku的时候,会自动将其放到第0个库存


localhost:6379[12]> select 0

OK

localhost:6379> keys *

1) "nova:comment:acceptor:2"

2) "Name"

3) "nova:comment:acceptor:1"

4) "Age"

localhost:6379> select 1

OK

localhost:6379[1]> keys *

(empty list or set)



将一个库存里边的东西,移动到另一个库存里去:

localhost:6379[1]> select 0

OK

localhost:6379> keys *

1) "nova:comment:acceptor:2"

2) "Name"

3) "nova:comment:acceptor:1"

4) "Age"

localhost:6379> move Name 1

(integer) 1

localhost:6379> keys *

1) "nova:comment:acceptor:2"

2) "nova:comment:acceptor:1"

3) "Age"

localhost:6379> select 1

OK

localhost:6379[1]> keys *

1) "Name"


flushall 会清空所有库存中的东西

localhost:6379[1]> flushall

37943:M 04 Feb 11:24:50.449 * DB saved on disk

OK



flushdb 会清空当前库存中的数据

localhost:6379[1]> flushdb

OK

localhost:6379[1]> keys *

(empty list or set)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值