redis常用命令

Redis命令

redis是一种高级的key:value存储系统,其中value支持五种数据类型:

1.字符串(strings

2.字符串列表(lists

3.字符串集合(sets

4.有序字符串集合(sorted sets

5.哈希(hashes

而关于key,有几个点要提醒大家:

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

2.key也不要太短,太短的话,key的可读性会降低;

3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd

 

Strings

Redis存储结构是key:valuevalue strings数据类型。

命令

语法set key value

1 set name zhangsanfeng

a) Strings类型keyname 添加一个

2 get name

a) 获取keyname属性值。

3 incr age

a) 数字字符类型自动加1

b) 数字字符类型自动转换integer类型,然后执行再加上1

4 decr age

a) 数字字符类型自1

b) 数字字符类型自动转换integer类型,然后执行减去1

5 incrby age 10

a) 指定键值加速10

6 decrby age 10

a) 指定键值减去10

Hash

Hash集合类型,适合于用来存储对象。Java集合类型是用来存储对象。

存储数据结构分析:

第一种数据结构

 

存取对象,使用一个key,使用一个key获取一个对象必须使用反序列化

缺点

占用IO资源。

第二种数据结构:

 

缺点

用户ID多次使用,数据冗余。资源浪费

第三种数据结构:

 

Redis存储结构:key是用户ID value:就是hash类型数据。

命令

1 hset user username zhaowuji

a) userUsername属性设置一个值

2 hget user username

a) 获取UserUsername属性

3 hdel user password …..

a) 删除User属性

4 hsetnx user email .baidu.com

a) 如果useremail属性值已经存在,不覆盖

b) 如果不存在,设置值。

5 hmset user password 123 age 11

a) 同时设置多个值

6 Hmget user username age password

Lists

List集合数据结构:类似数组,数据是顺序存储。

List集合链表结构:通过指针从头指针查询到尾指针查找元素。

 

命令

 

1 lpush mylist a b c d

 

a) list类型数据结构设置多个值

 

2 lrange mylist 0 -1

 

a) 获取mylist集合中所有

 

b) 0:值链表开始位置

 

c) -1链表的结束位置

 

3 lpop mylist

 

a) 出栈集合mylist:出栈链表头指针元素。

 

4 lrem mylist 3 a

 

a) 删除链表mylist中前3个等于a

 

5 lset mylist 2 s

 

a) 链表mylist集合中2角标位置设置一个值,覆盖原值。

 

6 linsert mylist after s b

 

a) 集合链表mylsits元素后面插入一个b

 

Set

 

命令

 

1 sadd myset a b c

 

a) set集合myset设置值:a b c

 

b)  Set集合元素不允许重复

 

2 smembers myset

 

a) 获取集合myset中值

 

3 srem myset a b

 

a) 删除集合myset中元素

 

4 smove myset myset1 c

 

a) 集合myset元素c移动到集合myset1

 

Sorted set

 

Set集合:有序集合。

 

 set集合中每一元素都设置一个得分,根据得分排序

 

 Set集合元素不允许重复,得分可以重复。

 

设置得分语法:ZADD key score member [score] [member]

 

命令

 

1 zadd mysset 1 one 2 two 12 three 9 four 10 five

 

a) 集合mysset集合添加5个元素,每一个元素都设置一个得分。

 

2 zcount mysset 1 10

 

a) 获取分数110的元素个数,默认是闭区间。

 

3 zcount mysset (1 10

 

a) 获取分数110的元素个数,左边是开区间(不包含1元素)

 

4 zcount mysset -inf +inf

 

a) 获取所有元素

 

b) –inf:最低值

 

c) +inf:最高

 

5 zrange mysset 0 -1 withscores

 

a) 获取集合mysset所有元素

 

b) 0:头部元素

 

c) -1表示尾部元素

 

d) Withscores查询元素时候,把分数查询出来

 

6 zrangebyscore mysset 1 10 withscores limit 2 2

 

a) 根据分数大小来获取元素:

 

b) Limit分页获取值。

 

多数据库实例

 

Redis支持16个数据库实例,数据库实例角标从0—15使用redis客户端登录redis服务器,默认登录0数据库。

 

登录其他数据库实例:

 

登录语法:select 数据库实例ID角标

 

登录1号数据库:

 

127.0.0.1:6379> select 1

 

OK

 

127.0.0.1:6379[1]>

 

需求:把0数据库数据移动1号数据库

 

命令move user 1 //移动user1号数据库

 

事务

 

事务命令:

 

开启事务:multi

 

提交事务:exec

 

回滚事务:discard

 

监听事务:watch乐观锁

 

用户A,用户B 同时读取商品数量itemNum=1用户A,用户B都需要购买商品,商品数量需要减去1使用乐观锁解决问题:

 

事务一致性 

 

设计:商品数量添加,在添加过程出一个错误,查看程序执行一致性。

 

127.0.0.1:6379> multi//开启事务

 

OK

 

127.0.0.1:6379> incr itemNum

 

QUEUED

 

127.0.0.1:6379> incr itemNum

 

QUEUED

 

127.0.0.1:6379> incrby itemNum 10

 

QUEUED

 

127.0.0.1:6379> lpop itemNum//使用操作list数据结构命令操作String类型,出现错误

 

QUEUED

 

127.0.0.1:6379> decr itemNum

 

QUEUED

 

127.0.0.1:6379> decrby itemNum 10

 

QUEUED

 

127.0.0.1:6379> exec//提交事务

 

1) (integer) 2

 

2) (integer) 3

 

3) (integer) 13

 

4) (error) WRONGTYPE Operation against a key holding the wrong kind of value

 

5) (integer) 12

 

6) (integer) 2

 

 

 

特点redis事务不遵循ACID大一统理论,即使中间执行出现错误,后面不影响执行。

 

12.2 事务回滚

 

 

 

127.0.0.1:6379> mult//开启事务

 

OK

 

127.0.0.1:6379> incr itemNum

 

QUEUED

 

127.0.0.1:6379> incr itemNum

 

QUEUED

 

127.0.0.1:6379> discard//事务回滚

 

OK

 

127.0.0.1:6379> get itemNum

 

"2"

 

12.3 Watch

 

Watch监听事务:乐观锁

 

乐观锁:一旦发现被监听事务变量发生了变化,事务回滚。

 

127.0.0.1:6379> watch itemNum

 

OK

 

127.0.0.1:6379> multi

 

OK

 

127.0.0.1:6379> decr itemNum //检测到itemNum发生变化时,此命令不执行

 

QUEUED

 

127.0.0.1:6379> exec

 

(nil)

 

127.0.0.1:6379> get itemNum

 

"0"

 

 

 

 Redis持久化

 

Rdbredis系统默认持久化策略)

 

Rdb持久化优点

 

1 持久化文件将只包含一个文件

 

2 对灾难恢复,主从复制 效率比较高。

 

3 持久化工作:子进程

 

Rdb缺点

 

1 数据安全性不是很好

 

Rdb数据持久同步策略

 

 缺省情况下,Redis会将数据集的快照dumpdump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:
    save 900 1              #900(15分钟)之后,如果至少有1key发生变化,则dump内存快照。
    save 300 10            #300(5分钟)之后,如果至少有10key发生变化,则dump内存快照。
    save 60 10000        #60(1分钟)之后,如果至少有10000key发生变化,则dump内存快照。

Aof

Aof持久化优点

1 根据redis aof同步策略,数据有更高安全性

Aof缺点

1 性能比rdb

原文地址:https://www.cnblogs.com/13224ACMer/p/6796114.html