1. Redis的五种数据结构
Redis 可以存储键和五种不同类型的值之间的映射。
键
的类型只能为字符串
,值支持五种数据类型
:字符串、列表、集合、散列表、有序集合。
程序是用来处理数据的,redis是用来存储数据的,程序处理完的数据要存储到redis中,不同特点的数据要存储在redis中不同类型的数据结构中。
字符串: 单key: 单value
list列表: 有序可重复 单key: 多有序value(这里的有序指的是输入和输出的顺序)
set集合: 无序不可重读 单key: 多个无序value
pojo hash 单key : 对象(属性:值)
zset 单key: 多有序value(这里的有序指的是排序)
- 字符串类型String
字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。
- 列表类型list
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构。
- 集合类型set
Redis 的Set是 string 类型的无序无重复集合。
- 哈希类型hash
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 有序集合类型zset (sorted set)
Redis有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset 的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。
是实现了sortedset接口的TreeSet集合,利用比较器实现排序
2. redis中的操作命令
redis中存储的Key-Value
2.1 redis中有关key的操作命令:
2.1.1 查看数据库中所有的key : keys pattern
作用:查找所有符合模式pattern的 key。 pattern可以使用通配符通配符:
*
:表示0或多个
字符,例如: keys*查询所有的 key。
?
:表示单个
字符,例如: wo?d,匹配word , wood
[]
:表示选择[]内的一个字符,例如 wo[or]d,匹配word, wood,不匹配wold、woord
keys *
: 查看数据库实例中所有的key
keys k*
:查看数据中所有以k开头的key
keys h*o
:查看数据中所有以h开头以o结尾的key
keys h[abc]llo
:查看数据中所有以h开头以llo结尾,并且h后边只能取abc中的一个字符的key
2.1.2 判断key在数据库中是否存在:exists key
exists key
如果存在,返回1;如果不存在,则返回0
exists key [key key .....]
返回值是存在的可以的数量
2.1.3 移动指定key到指定的数据库实例: move key index
move k 1
用的很少,一般情况下,一个数据库实例对应一个项目,这种转移key到另外一个数据库实例中用的很少
2.1.4 查看指定key的剩余生存时间:ttl
time to live
ttl k1
查看k1的剩余生存时间
如果k1不存在返回-2.
如果k1没有设置生存时间返回-1,只要不宕机数据一直存在
2.1.5 设置key的最大生存时间:expire key seconds
expire k2 20
给k2设置生存时间20s,,,到时间数据消失
2.1.6 查看指定key的数据类型 type key
type k1
返回当前数据类型
2.1.7 重命名key: rename key newkey
rename k1 k2
把k1更改为k2,,,值不变只是重命名了key
2.1.8 删除key : del key
del key
删除指定key的数据,返回值是实际删除key的数量
也可以删除多个数据
del k1 k2 k3 ....
删除多条数据
2.2 redis中有关String数据类型的操作命令
2.2.1 将string类型的数据设置redis中:set 键 值
set zsname zhangsan
set zsage 20
set totalRows 100
2.2.2 从redis中获取string类型的数据:get 键
get zsname
get zsage
get totalRows
2.2.3 追加字符串:append key value
set phone 1388888
添加key-value
append phone 6666
在key=phone的值中追加6666,返回追加之后的字符串长度
如果key不存在,则创建key-value
2.2.4 获取字符串数据的长度:strlen key
strlen phone
获取字符串的长度
2.2.5 将字符串值进行加1运算:incr key
incr zsage
将张三的年龄值加1 ,返回加1运算之 后的值
如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算
要求key所表示value必须是数值,否则,报错
incr zsname 报错
2.2.6 将字符串数值进行减1运算:decr key
- 返回减1运算之后的数据
- 如果key不存在,首先设置一个key,值初始化为0,然后进行decr运算。
- 要求key所表示value必须是数值,否则,报错
2.2.7 将字符串数值进行加offset运算:incrby key offset
incrby key offset
- 返回加offset运算之后的数据
- 如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算。
- 要求key所表示value必须是数值,否则,报错
incrby zsage 10
对张三数据进行加10运算,
2.2.8 将字符串数值进行减offset运算:decrby key offset
- 返回加offset运算之后的数据
- 如果key不存在,首先设置一个key,值初始化为0,然后进行decrby运算。
- 要求key所表示value必须是数值,否则,报错
decrby zsage 10
对张三数据进行减10运算
2.2.9 闭区间截取字符串:getrange key startIndex endIndex
截取下标是从0开始,闭区间截取
从左往右下标是0,1,2,3…
从右往左下标是-1,-2,-3 …
zhangsan
getrange zsname 2 3
返回结果是an
gettrange zsname 2 -3
返回结果 angs
2.2.10 用value覆盖从下标为startIndex开始的字符串:setrange key startIndex value
zhangshan
setrange zsname 5 xiaoming
修改之后的数据为zhangxiaoming