一、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:
redis-server
连接Redis:
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是否存在
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是否存在
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)
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是原子性的,要么都成功,要么都不成功。
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不存在时。
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
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
执行原子减去一个整数
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 '命令'