Redis 基础操作

一、Redis 介绍

1、Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 

2、它支持多种类型的数据结构,如:

 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

3、Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

 

二、Redis 的数据类型

1、string 是最常用的一种数据类型,普通的key/value存储都可以归为此类。

2、hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

3、list 是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表可以轻松地实现最新消息排行等功能。

4、set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

5、sort Set 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

 

三、Redis 常用命令

启动 Redis:

Bash
redis-server 

连接Redis:

Bash
redis-cli -h 127.0.0.1 -p 6379 

 

1、查看所有缓存的键:keys * 

2、查看数据库中key的数量:DBSIZE

3、设置某个key的过期时间:EXPIRE testkey 60

4、获取一个list的长度:LLEN testlist

5、返回名称为key的hash中所有键:HGETALL testhash

6、返回集合 testkey 中的所有成员:SMEMBERS testkey

7、清除缓存,返回被删除testkey的数量:DEL keyname

 

四、KEY 相关命令

1、KEYS pattern

查找所有匹配给定的模式的键,keys * 查看所有缓存的键

2、EXISTS key

查询一个key是否存在

Bash
127.0.0.1:6379> keys *
1) "k8"
2) "k7" 3) "key" 4) "k3" 127.0.0.1:6379> del k7 key (integer) 2 127.0.0.1:6379> keys * 1) "k8" 2) "k3" 

3、DUMP key 

导出key的值,如果 key 不存在,那么返回 nil。否则,返回序列化之后的值。

"\x00\x02v3\b\x00\xf1*K%b\xcd\x8e\xa0"

4、EXISTS key

查询一个key是否存在

Bash
127.0.0.1:6379> dump key
(nil)
127.0.0.1:6379> dump k3
"\x00\x02v3\a\x00\xb75ri\xc3\x1e\xd1\x82" 127.0.0.1:6379> exists key (integer) 0 127.0.0.1:6379> exists k8 (integer) 1 

 

5、EXPIRE key 20

设置一个key的过期秒数(秒)

6、TTL key

获取key的有效时间(秒),如果key不存在,返回 -2,建议与EXPIRE key一起来测试效果

7、EXPIRE key 20000

设置key的有效时间(毫秒)

8、PTTL key

获取key的有效毫秒数(毫秒)

9、RENAME key newkey

将一个key重命名,如果该newkey已经存在了,那就用将被改名的key的value覆盖至与已存在老的newkey的值。

10、RENAMENX key newkey

重命名一个key,新的key必须是不存在的key,修改成功时,返回 1 ,如果 newkey 已经存在,返回 0 。

11、RANDOMKEY

返回一个随机的key

12、TYPE key

获取key 的存储类型

13、MOVE key db

把key移动到另外一个数据库里

14、FLUSHDB与FLUSHALL

FLUSHDB就是清除当前DB里的所有数据(慎用)

FLUSHALL就是清除所有的DB里的所有数据(不要用)

 

五、String 相关命令

1、SET key value

设置一个key的value值

2、GET key

返回key的value

3、APPEND key value

追加一个值到key上,返回追加后的value的大小

4、GETSET key value

设置一个key的value,并获取设置前的值,如果key不存在,则设置一个新的key,返回设置前的值(nil)

Bash
127.0.0.1:6379> set key 111
OK
127.0.0.1:6379> get key
"111"
127.0.0.1:6379> append key 222 (integer) 6 127.0.0.1:6379> get key "111222" 127.0.0.1:6379> getset key 333 "111222" 127.0.0.1:6379> get key "333" 

5、MSET k1 v1 k2 v2 k3 v3 k4 v4 k5 v5

设置多个key value

6、MGET k1 k2 k3 k4 k5

获取所有key的值

7、MSETNX k1 whb1 k2 whb2 k6 whb6 k7 whb7

设置多个key value,仅当key不存在时;MSETNX是原子性的,要么都成功,要么都不成功。

Bash
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2" 127.0.0.1:6379> msetnx k1 111 k7 777 (integer) 0 127.0.0.1:6379> mget k1 k7 1) "v1" 2) (nil) 

8、SETNX key value

同上,设置一个key的值,只有当key不存在时。

Bash
127.0.0.1:6379> setnx k1 111
(integer) 0
127.0.0.1:6379> setnx k8 888
(integer) 1 

9、SETEX key seconds value

设置key-value,并设置过期时间

10、STRLEN key

获取指定key值的长度

11、INCR key

执行原子加1操作,key的值必须为64位有符号整型数据

如果指定的key不存在,则在执行incr操作之前,会将他的值设为0

Bash
127.0.0.1:6379> strlen k1
(integer) 2
127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range 127.0.0.1:6379> incr k7 (integer) 1 127.0.0.1:6379> get k7 "1" 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> incr k9 (integer) 1 127.0.0.1:6379> get k9 "1" 

12、INCRBY key increment

执行原子增加一个整数

13、DECR key

整数原子减1

14、DECRBY key increment

执行原子减去一个整数

Bash
127.0.0.1:6379> decr k7
(integer) 3
127.0.0.1:6379> incr k7
(integer) 4 127.0.0.1:6379> incrby k7 3 (integer) 7 127.0.0.1:6379> decr k7 (integer) 6 127.0.0.1:6379> decrby k7 1 (integer) 5 

1、如果key的值不是整数,则报错(error)

2、INCR/DECR/INCRBY/DECRBY,这些操作返回的都是计算之后的结果

3、如果指定的key不存在,则在执行incr操作之前,会将他的值设为0

 

五、数据类型的增删改查

1、字符串类型

创建和修改:set user 'zhangsan'

获得key的值:get user

删除键:del user

 

2、哈希类型

单个值创建:hset users id 1,hset users name 'zhangsan'

单值显示:hget users id

多值创建:hmset users id 1 name 'zhangsan' age 20

多值显示:hmget users id name age //显示三个数据

hgetall users

删除哈希中的一个键:hdel users age

 

3、list类型(栈结构)

创建:lpush mylist 'aaa'

显示:lrange mylist 0 -1 //全显示

修改某个元素:lset mylist 0 'ccc' //把第0个位置的值改为ccc

删除list:del mylist

弹出一个元素:lpop mylist

除了保留的,其他的删掉:ltrim mylist 0 1 //0到1留下,其他的删除

移除等于value的元素

lrem key 0 'eee'

查看列表中指定下标的值

lindex mylist 1 //查看第2个的值

 

4、set类型

创建:sadd myset 'aaa'

显示:smembers myset

 

5、有序集合(sorted set)

创建:

zadd mysort 1 'aaa'

zadd mysort 3 'ccc'

zadd mysort 2 'bbb'

显示:

zrange mysort 0 -1 WITHSCORES

 

6、事物处理

multi

多条命令

exec

 

7、执行脚本

eval '命令'

你可能感兴趣的:(Redis 基础操作)