redis数据结构介绍
strings 字符串。
一个比较简单的存储类型,就是一个 key 对应一个 value;我们打开redis-cli来试试,不知道怎么启动redis可以开我的上篇reids的安装。
set name “xiao wang”
get name
通过set 声明 name 字段作为 key,xiao wang作为值存储下来;通过get 取字段name的值。
重新set name另外的值时候,原来set的 xiao wang被覆盖,变成新的值 ni hao,所以一个key 对应一个 value,同时注意的是值得大小不能超过512M。
你以为这个数据结构就这样,说了一堆废话!其实还有计数功能。来看看。
通过以上命令可以看到strings结构 可以通过 incr incrby decr decrby 来操作值,而且还可以存储数值不仅仅是字符串,解析能力还是大大滴好滴。你系不系会说,你再教我小学数据吗?你咋不上天呢!
好吧!我错了,其实这个小学算数,在项目中可以帮助我们进行计数类统计,比如实时用户数,投票数等等!如果我们去写这些统计数值的,你系不系要考虑多线程安全问题?然后你可能会说,什么线程安全!
我擦!你还不知道这个问题?就是两个用户在同一时间取到一个数值假设是10,当他们都要去加1的时候得到结果就会是11但是我们理想的应该是12,啊!可清楚了,知道了吧。所以redis是不会发生这种情况的ok?
redis的计数不必考虑,当然之后会探讨下为什么redis能确保线程安全下,还可以保证有极高的读写性能。
除了计数操作之后字符串还有相关的一些其他的操作:
1.MSET和MGET 来一次存多key对应多值,一次获取多个key - value,具体演示看下面。
通个exists 检查key 是否存在
返回1代表存在,0为不存在。就是这么噶事。
del 命令删除一个 key
看到了吧,看到就好。删除后再检查name是否存在时候结果就是 0了。
type检查 存下来的value是什么类型
我存了一个 10,用type它告诉我是string类型的。
重点放expire可以设置一个存下来的key-value 有一个失效时间,过了时间就鸡鸡,game over.这个功能很有用的,比如在用户缓存时间,可以设置登录在线超时。来清空用户登录。
看我操作! 我建立 key-value 再设置这个key有效期10秒。是不是太快了呵呵呵你懂得! 立马去get human有值。坚持到10秒,再get human 美女跑掉了
lists介绍
lists列表是一种链表式的数组,插入的速度是很快的,对于100元素中在头部或者尾部插入一个元素的速度,和在1000个元素中插入的速度相比是一样的,时间的复杂度是常量级别。
- lists lpush(向左插入一个元素) 和 rpush(向右插入一个元素)
lpush man gexu
lpush man gexu2
rpush man gexu3
lrange man 0 -1
rpush man gexu gexu2 gexu3 //一次插入多个元素
- rpop 和 lpop (从最右边和最左边删除元素,并返回删除的值)
- del (删除)、exists(检测是否存在)
del man;
exists man;
HASHS介绍
以键值对存在- 使用 hmset 命令存入 hget、hgetall获得值
- hincrby 增加某个域字段的值
SETS介绍
- sets是string数据结构的无序排列,通过sadd 插入元素,查询出来之后和插入的顺序不一定是一致的。
命令 >sadd man gexu gexu1 gexu2;
命令 >smembers man (查询man中所有元素)
得到的顺序不是插入的顺序。
sets除了基本的插入 删除(spop)还有交集 并集 或许随机元素等等可以去官方查询命令
点我查询
soted sets 是一种带有排序的集合。
命令 > zadd man 2 gexu2
命令 > zadd man 1 gexu1
命令 > zadd man 3 gexu3
按照以上插入顺序 并设置排序序号。
命令 > zrange man 0 -1 (得到结果是根据 序号升序列出所有元素)
命令 > zrevrange man 0 -1(得到结果是根据 序号降序列出所有元素)
-总结
对于常用的redis数据结构主要是以上4个在大部分项目中是最常见的,根据它本身的特性,应用到具体的系统服务中。